Python 熊猫:将Nan替换为两列之一的值
给定以下数据帧df,其中df['B']=df['M1']+df['M2']: 我希望B列中的NaN等于M1或M2中的相应值,前提是后者不是NaN: 建议使用: df.LOC[dF[b]′.ISNULL,'B'′=DF['M1′],但该线的结构允许考虑M1或M2,而不是同时考虑。 关于我应该如何改变它来考虑这两个栏目的想法? 编辑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['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,这取决于你,但我认为最好是从维基改为普通答案;祝你好运