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

如何用更简洁方式在Pandas中实现多条件IF逻辑生成新列?

用numpy.select简化Pandas中嵌套IF逻辑的列生成

需求背景

需要给Pandas DataFrame添加verify_col列,逻辑对应Excel的嵌套IF公式:

=IF(sum1=3,IF(AND(col1=col2,col2=col3),0,1),IF(sum1=2,IF(OR(col1=col2,col2=col3,col1=col3),0,1),IF(sum1=1,0,1)))

示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': ['BMW', 'Mercedes Benz', 'Lamborghini', 'Ferrari', np.nan],
    'col2': ['BMW', 'Mercedes Benz', np.nan, np.nan, 'Tesla'],
    'col3': ['BMW', 'Mercedes', 'Lamborghini', np.nan, 'Tesla_'],
    'sum1': [3, 3, 2, 1, 2]
})

期望生成的verify_col结果为[0, 1, 0, 0, 1],其中0表示无差异,1表示有差异。

简洁实现方案(numpy.select)

利用numpy.select的向量化操作,把所有判断条件和对应赋值清晰拆分,替代嵌套IF逻辑,代码更简洁且性能更优:

# 定义所有判断条件
conditions = [
    # sum1=3 且三列完全相等
    (df['sum1'] == 3) & (df['col1'] == df['col2']) & (df['col2'] == df['col3']),
    # sum1=3 但三列不全相等
    (df['sum1'] == 3),
    # sum1=2 且任意两列相等
    (df['sum1'] == 2) & ((df['col1'] == df['col2']) | (df['col2'] == df['col3']) | (df['col1'] == df['col3'])),
    # sum1=2 但任意两列都不相等
    (df['sum1'] == 2),
    # sum1=1
    (df['sum1'] == 1)
]

# 对应条件的赋值结果
values = [0, 1, 0, 1, 0]

# 生成目标列
df['verify_col'] = np.select(conditions, values, default=1)

验证结果

执行后查看verify_col:

print(df['verify_col'].tolist())
# 输出:[0, 1, 0, 0, 1]

方案优势

  • 逻辑清晰:条件和赋值一一对应,比嵌套IF更易读和维护
  • 性能高效:向量化操作避免逐行遍历,处理大数据集时优势明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:05:27