2017-02-09 176 views
1

我有一個帶有兩列A和B的pandas DataFrame,它們包含數值或NaN。其中的數值顯示在一列,在另一列中的相應單元格將始終爲NaN,例如:根據Pandas DataFrame中的值將行值複製到相鄰列

A B 
0 123 NaN 
1 456 NaN 
2 NaN 789 

我想複製(或,可替換地,移動)任何非NaN值在列A到覆蓋相應楠B列,如:

A B 
0 123 123 
1 456 456 
2 NaN 789 

基於this reply到類似的問題,我想出了:

mask = (df['A'] != np.nan)&(df['B'] == np.nan) 
df['B'][mask] = df['A'][mask] 

但是,這會導致沒有變化。任何人都可以解釋我要去哪裏錯了嗎?

+0

我已經走了與jezrael的答案,但會聖對我爲什麼(在這種情況下不必要的複雜)嘗試失敗的任何線索都不具有價值? – TheRogueWolf

回答

1

您可以使用combine_firstfillna

df.B = df.B.combine_first(df.A) 
print (df) 
     A  B 
0 123.0 123.0 
1 456.0 456.0 
2 NaN 789.0 

或者:

df.B = df.B.fillna(df.A) 
print (df) 
     A  B 
0 123.0 123.0 
1 456.0 456.0 
2 NaN 789.0 

ANF如果沒有NaNB更換投給int後:

df.B = df.B.fillna(df.A).astype(int) 
print (df) 
     A B 
0 123.0 123 
1 456.0 456 
2 NaN 789 
相關問題