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

如何在pandas中基于第三列条件在两列间选择值?禁用lambda函数

不用Lambda实现Pandas版Excel IF逻辑的几种方法

嘿,这个需求太常见了!不用lambda的话,咱们完全可以用pandas和numpy的原生矢量化操作来搞定,不仅效率比lambda+apply高得多,代码还更简洁易读。我给你分享几个实用的方案,先拿个示例数据集来演示:

import pandas as pd
import numpy as np

# 构造测试数据
df = pd.DataFrame({
    'Condition': [True, False, True, False],
    'Column1': [10, 20, 30, 40],
    'Column2': [100, 200, 300, 400]
})

1. 最贴近Excel逻辑:np.where()

这个方法的语法和Excel的IF公式几乎一模一样,完全对应IF(条件, 真值返回值, 假值返回值)的结构:

df['NEW_COLUMN'] = np.where(df['Condition'], df['Column1'], df['Column2'])

执行后你的NEW_COLUMN就会根据Condition列的值,分别从Column1或Column2取数,完美复刻Excel的逻辑,而且是矢量化操作,大数据集下比lambda快N倍。

2. 可读性拉满:loc条件赋值

如果你喜欢分步操作,或者后续要扩展复杂条件,用loc索引来分步赋值会更清晰:

# 先给新列设置默认值(比如先取Column2的所有值)
df['NEW_COLUMN'] = df['Column2']
# 再把满足Condition的行替换成Column1的值
df.loc[df['Condition'], 'NEW_COLUMN'] = df['Column1']

这种方式逻辑一目了然,新手也能快速看懂,适合需要多条件分支或者中间要做其他处理的场景。

3. Pandas原生方法:where()/mask()

Pandas自己也提供了类似的方法,where()和mask()是一对反向操作:

  • where(条件, 替代值):满足条件时保留原列值,不满足时用替代值
  • mask(条件, 替代值):不满足条件时保留原列值,满足时用替代值

用where实现需求的代码:

df['NEW_COLUMN'] = df['Column1'].where(df['Condition'], df['Column2'])

用mask的话需要取反条件,效果一样:

df['NEW_COLUMN'] = df['Column1'].mask(~df['Condition'], df['Column2'])

这两个方法也是矢量化的,代码简洁,属于Pandas的惯用写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:11:44