Skip to main content
 首页 » 编程设计

python之Pandas:用两列之一的值替换 Nan

2025年05月04日13duanxz

给定以下数据帧 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))