我有一个 pandas DataFrame,有两列,A 和 B,其中包含数值或 NaN。如果一列中出现数值,则另一列中的相应单元格将始终为 NaN,例如:
A B
0 123 NaN
1 456 NaN
2 NaN 789
我想复制(或者移动)A 列中的任何非 NaN 值以覆盖 B 列中相应的 NaN,例如:
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 如果在将强制转换替换为 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
关于python - 根据 Pandas DataFrame 中的值将行值复制到相邻列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42132746/