给定以下数据帧 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
我希望 B 列中的 NaN 等于 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。
请您参考如下方法:
基于我们上面评论中的讨论
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))
