根据Pandas DataFrame中的值将行值复制到相邻列
问题描述:
我有一个带有两列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]
但是,这会导致没有变化。任何人都可以解释我要去哪里错了吗?
答
您可以使用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如果没有NaN
值B
更换投给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
我已经走了与jezrael的答案,但会圣对我为什么(在这种情况下不必要的复杂)尝试失败的任何线索都不具有价值? – TheRogueWolf