熊猫:用两列之一的值替换Nan

FaC*_*fee 1 python nan dataframe pandas

给定以下数据框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
Run Code Online (Sandbox Code Playgroud)

我希望NaNin列B等于in 的相应值,M1或者M2前提是后者不是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
Run Code Online (Sandbox Code Playgroud)

建议使用以下答案

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

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

编辑

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

WeN*_*Ben 6

基于我们上面评论中的讨论

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
Run Code Online (Sandbox Code Playgroud)

从jezrael

df['B']= (df['M1']+ df['M2']).fillna(df[['M2','M1']].sum(1))
Run Code Online (Sandbox Code Playgroud)