Python 熊猫:将Nan替换为两列之一的值

Python 熊猫:将Nan替换为两列之一的值,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,给定以下数据帧df,其中df['B']=df['M1']+df['M2']: 我希望B列中的NaN等于M1或M2中的相应值,前提是后者不是NaN: 建议使用: df.LOC[dF[b]′.ISNULL,'B'′=DF['M1′],但该线的结构允许考虑M1或M2,而不是同时考虑。 关于我应该如何改变它来考虑这两个栏目的想法? 编辑 不是重复的问题!为了便于理解,我声称df['B']=df['M1']+df['M2'],但在我的实际情况中,df['B']不是一个和,而是来自一个相当复杂的计算。因此

给定以下数据帧df,其中df['B']=df['M1']+df['M2']:

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

建议使用:

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
来自耶斯雷尔

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

基于我们在评论中的上述讨论

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
来自耶斯雷尔

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

您需要df['B']=df['M1'].adddf['M2'],fill_value=0,使用df.B.fillnadf['M2','M1']似乎是dupe…@FaCoffee fillna。max1@FaCoffee我认为我们认为df['B']=df['M1']+df['M2'].fillnadf['M2','M1'].max1,另一个解决方案是df['B']=df['M1']+df['M2'].fillnadf['M2','M1']。sum1@FaCoffee是的,杰兹是对的,您只需要将其分配回df.B=df.B.fillnadf[['M2','M1']。max1@Wen-请加上答案;您需要df['B']=df['M1'].adddf['M2'],fill_value=0,使用df.B.fillnadf['M2','M1']似乎是dupe…@FaCoffee fillna。max1@FaCoffee我认为我们认为df['B']=df['M1']+df['M2'].fillnadf['M2','M1'].max1,另一个解决方案是df['B']=df['M1']+df['M2'].fillnadf['M2','M1']。sum1@FaCoffee是的,杰兹是对的,您只需要将其分配回df.B=df.B.fillnadf[['M2','M1']。max1@Wen-请加上答案@耶斯雷尔不用担心,我想op也会帮助自己:——@Wen-ya,这取决于你,但我认为最好是从维基改为普通答案;祝你好运@耶斯雷尔不用担心,我想op也会帮助自己:——@Wen-ya,这取决于你,但我认为最好是从维基改为普通答案;祝你好运