FaC*_*fee 1 python nan dataframe pandas
给定以下数据框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
Run Code Online (Sandbox Code Playgroud)
我希望NaNin列B等于in 的相应值,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
Run Code Online (Sandbox Code Playgroud)
建议使用以下答案:
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
Run Code Online (Sandbox Code Playgroud)
从jezrael
df['B']= (df['M1']+ df['M2']).fillna(df[['M2','M1']].sum(1))
Run Code Online (Sandbox Code Playgroud)