鉴于以下数据框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
等于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
This answer建议使用:
df.loc[df['B'].isnull(),'B'] = df['M1']
,但此行的结构允许考虑M1
或M2
,而不是同时考虑两者。
关于如何更改它以考虑两列的想法?
修改
不是重复的问题!为了便于理解,我声称df['B']=df['M1']+df['M2']
,但在我的实际情况中,df['B']
不是一个总和,而是来自一个相当复杂的计算。因此,我无法将简单公式应用于df['B']
:我所能做的就是更改NaN
值以匹配M1
或M2
中的相应值。
答案 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))