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

Pandas基于其他列条件添加列:三种实现方式的优劣选择

三种Pandas新增条件列方法的对比与场景选择

你提到的这三种实现方式都能顺利生成is_rich列,但它们在效率、可读性和适用场景上各有不同,下面给你逐个拆解:

方法1:使用np.where()

df['is_rich_method1'] = np.where(df['salary']>=50, 'yes', 'no')
  • 这是向量化操作,底层依托NumPy和Pandas的原生向量化运算,处理大型数据集(比如百万级以上行)时速度远超其他两种方法,是效率最高的选择。
  • 代码简洁直观,一行就能完成条件判断与赋值,可读性拉满,团队协作时别人一眼就能看懂逻辑。
  • 适用场景:绝大多数常规业务场景,尤其是数据量较大时,优先选它准没错。

方法2:列表推导式

df['is_rich_method2'] = ['yes' if x >= 50 else 'no' for x in df['salary']]
  • 本质是Python层面的循环遍历,效率远低于向量化操作,数据量越大,和方法1/3的速度差距越明显。
  • 唯一的优势是如果你的条件逻辑异常复杂(比如多层嵌套的判断),用Python的条件表达式写起来可能比np.where更灵活,但这种复杂场景其实更推荐用自定义函数结合向量化,而非列表推导。
  • 适用场景:仅适合小数据集的临时测试,或者快速验证逻辑的时候,不建议在生产环境的大数据集上使用。

方法3:先赋默认值再用loc更新

df['is_rich_method3'] = 'no'
df.loc[df['salary'] > 50,'is_rich_method3'] = 'yes'
  • 属于分步式操作,逻辑非常清晰:先给所有行设置默认值,再精准定位符合条件的行进行更新。
  • 效率上和方法1持平(底层也是向量化操作),但代码行数稍多一点。
  • 适用场景:当你需要分多次更新不同条件的列值时(比如先设默认值,再给A条件设为'yes',再给B条件设为'maybe'),这种分步方式会比嵌套多层np.where更易读、更易维护。

优先级总结

  1. 首选方法1(np.where):兼顾效率和可读性,90%的场景都能完美适配。
  2. 复杂多条件分步更新场景,选方法3。
  3. 方法2仅作为小数据量临时方案,不推荐大规模使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:05:06