根据Pandas DataFrame中的值将行值复制到相邻列

时间:2017-02-09 09:25:45

标签: python pandas

我有一个带有两列A和B的pandas DataFrame,它们包含数值或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]

但这导致没有变化。谁能解释我哪里出错?

1 个答案:

答案 0 :(得分:2)

您可以使用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如果在替换为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