我正在尝试通过其他两个值来评估DF中的新列,但是如果缺少值,则尝试传递另一个表达式。
df_merge["3"] = df_merge.apply(lambda row: row["1"] + row["2"]
if pd.isnull(row["1"]) or pd.isnull(row["2"])
else (row["1"] + row["2"])/2,
axis=1)
loc 1 2 3
0 135200 0.391 0.224 0.3075
1 135210 0.400 0.220 0.3100
95 136150 NaN 0.505 NaN
96 136160 NaN 0.527 NaN
这就是我得到的。因此,如果1或2为null,我想使用第一个表达式,否则使用最后一个。 但是,第一个表达式永远不会传递。例如,如果我尝试测试:
pd.isnull(df_merge.iloc[96,3])
它的计算结果为True,那么为什么不在该实例中传递第一个表达式?
我也尝试过:
df_merge["3"].fillna(value=df_merge["1"] + df_merge["2"],inplace=True)
什么也没做。
此致, 弗雷德里克
答案 0 :(得分:1)
这里最简单的方法是每行使用mean
,因为默认情况下,大熊猫中的均值会省略NaN
(如果不是像2
行一样都是NaN):
df_merge = pd.DataFrame({'1':[np.nan, np.nan, 1, 2],
'2':[5, np.nan, np.nan, 4]})
df_merge["3"] = df_merge[["1",'2']].mean(axis=1)
print (df_merge)
1 2 3
0 NaN 5.0 5.0
1 NaN NaN NaN
2 1.0 NaN 1.0
3 2.0 4.0 3.0