2015-07-20 220 views
31

我有一个简单的数据框类似如下:熊猫数据帧:一列替换所有的值,根据条件

Pandas DataFrame

我想从“第一季”列中选择所有值,并替换那些这比1990年增加了1倍。在这个例子中,只有巴尔的摩乌鸦队才会把1996年换成1(保持其他数据不变)。

我已经使用了以下内容:

df.loc[(df['First Season'] > 1990)] = 1 

但是,它由1替换该行中的所有值,而不是仅仅在“第一季”列中的值。

如何仅替换该列中的值?

回答

55

您需要选择列:

In [41]: 
df.loc[df['First Season'] > 1990, 'First Season'] = 1 
df 

Out[41]: 
       Team First Season Total Games 
0  Dallas Cowboys   1960   894 
1  Chicago Bears   1920   1357 
2 Green Bay Packers   1921   1339 
3  Miami Dolphins   1966   792 
4 Baltimore Ravens    1   326 
5 San Franciso 49ers   1950   1003 

所以这里的语法是:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ] 

您可以检查docs,也是10 minutes to pandas这表明语义

编辑

如果你想生成一个布尔值指标,那么你可以只使用布尔条件产生boolean值系列和铸铁的D型到int这将分别转换TrueFalse10

In [43]: 
df['First Season'] = (df['First Season'] > 1990).astype(int) 
df 

Out[43]: 
       Team First Season Total Games 
0  Dallas Cowboys    0   894 
1  Chicago Bears    0   1357 
2 Green Bay Packers    0   1339 
3  Miami Dolphins    0   792 
4 Baltimore Ravens    1   326 
5 San Franciso 49ers    0   1003 
+0

工作太棒了!难道不可能施加多重转换吗? 'df.loc [df ['First Season']> 1990,'First Season'] = 1 df.loc [df ['First Season'] <1990,'First Season'] = 0'使所有的值该列返回0 – ichimok

+0

您可以使用一个技巧'df ['First Season'] =(df ['First Season']> 1990).astype(int)'这会创建一个布尔串并且转换为int转换'True'和“假”分别为“1”和“0” – EdChum

+0

astype(int)更加可Pandorable!好答案。 – mythicalcoder