2015-07-20 157 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