2017-02-09 11 views
1

数値とNaNの2つの列AとBを持つpandas DataFrameがあります。数値が1列に表示された場合、他の列の対応するセルは常にNaNに、例えば次のようになります。Pandas DataFrameの値に基づいて行の値を隣接する列にコピー

A B 
0 123 NaN 
1 456 NaN 
2 NaN 789 

私はコピー(または、その代わりに、移動)したいすべての非NaN値列Aのへたとえば、列Bに対応するのNaNを上書き:私が出ている同様の質問にはthis replyに基づいて

A B 
0 123 123 
1 456 456 
2 NaN 789 

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

しかし、これは無変化をもたらします。誰が私が間違っているのか説明できますか?

+0

は私が行ってきたんjezraelの答えではなく、st私の(不必要に複雑な、この場合は)試みが失敗した理由について、何らかの手がかりをつけていますか? – TheRogueWolf

答えて

1

を使用できcombine_firstまたはfillna

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 intにキャストを交換した後BにはNaN値場合:

df.B = df.B.fillna(df.A).astype(int) 
print (df) 
     A B 
0 123.0 123 
1 456.0 456 
2 NaN 789 
関連する問題