Pandas lambda 函数无法识别 NaN

Pandas lambda function won't recognize NaN

我正在尝试通过其他两个值来评估 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 为空,我想使用第一个表达式,否则使用最后一个。 但是,第一个表达式永远不会通过。例如,如果我尝试测试:

pd.isnull(df_merge.iloc[96,3])

它的计算结果为 True,那么为什么第一个表达式没有在该实例中传递?

我也试过:

df_merge["3"].fillna(value=df_merge["1"] + df_merge["2"],inplace=True)

什么都没做。

真诚的, 弗雷德里克

这里最简单的是每行使用 mean,因为默认情况下 pandas 中的意思是省略 NaNs(如果不是两个 NaN 都像行 2):

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