熊猫:用两列中的一列替换Nan

时间:2018-01-09 15:15:36

标签: python pandas dataframe nan

鉴于以下数据框df,其中df['B']=df['M1']+df['M2']

   A    M1   M2   B
   1    1    2    3
   1    2    NaN  NaN
   1    3    6    9
   1    4    8    12
   1    NaN  10   NaN
   1    6    12   18

我希望NaN列中的B等于M1M2中的相应值,前提是后者不是NaN

   A    M1   M2   B
   1    1    2    3
   1    2    NaN  2
   1    3    6    9
   1    4    8    12
   1    NaN  10   10
   1    6    12   18

This answer建议使用:

df.loc[df['B'].isnull(),'B'] = df['M1'],但此行的结构允许考虑M1M2,而不是同时考虑两者。

关于如何更改它以考虑两列的想法?

修改

不是重复的问题!为了便于理解,我声称df['B']=df['M1']+df['M2'],但在我的实际情况中,df['B']不是一个总和,而是来自一个相当复杂的计算。因此,我无法将简单公式应用于df['B']:我所能做的就是更改NaN值以匹配M1M2中的相应值。

1 个答案:

答案 0 :(得分:5)

基于我们在评论

上面的讨论
df.B=df.B.fillna(df[['M1','M2']].max(1))
df
Out[52]: 
   A   M1    M2     B
0  1  1.0   2.0   3.0
1  1  2.0   NaN   2.0
2  1  3.0   6.0   9.0
3  1  4.0   8.0  12.0
4  1  NaN  10.0  10.0
5  1  6.0  12.0  18.0

来自jezrael

df['B']= (df['M1']+ df['M2']).fillna(df[['M2','M1']].sum(1))