You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas多条件判断生成新列时np.nan无法正确返回的问题求解

问题根因

你两个方案出错的核心原因是**np.nan不能用==做等值判断**,np.nan和任意值(包括它自己)做==比较都会返回False,必须用pd.isna()或np.isnan()来判断空值。

最优解决方案(向量化运算,性能远高于apply)

# 先判断行内A、B是否存在空值,有空值直接返回np.nan,否则按比较逻辑返回对应值
df['is_less'] = np.where(
    df[['A', 'B']].isna().any(axis=1),
    np.nan,
    np.where(df['B'] < df['A'], 'yes', 'no')
)

如果你习惯用自定义函数的写法,可以修改你的方案2如下

def reduced_growth(x):
    # 改用pd.isna判断空值
    if pd.isna(x['A']) or pd.isna(x['B']):
        return np.nan
    elif x['B'] < x['A']:
        return "yes"
    # 排除空值和B<A的场景后,剩下的都是B>=A,直接返回no即可,不需要额外判断
    else:
        return "no"

df['is_less'] = df.apply(reduced_growth, axis=1)

原方案错误说明

  • 方案1中df['A'] == np.nan所有行都返回False,空值行的is_less不会被赋值为np.nan
  • 方案2同理,x['A'] == np.nan永远不成立,永远走不到返回np.nan的分支,所以不会出现空值结果

内容的提问来源于stack exchange,提问作者brenda89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:27:01