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

Python如何基于多if判断为Pandas DataFrame批量新增列

Pandas多层条件判断生成新列解决方案

核心逻辑梳理

根据预期结果反推完整判断规则:

  • 当blue列值为1 或 red列值为1,且 green列值为0时,新列赋值为Flower A
  • 其余所有情况,新列赋值为Flower B

推荐实现方式(无需逐行iloc,整表向量化运算)

方法1:numpy.select 多条件匹配(性能最优,适合大数据量)

向量化运算无逐行循环开销,是pandas多条件赋值的首选方案:

import pandas as pd
import numpy as np

# 加载示例数据
example = {
  "blue": [1, 1, 0, 0, 1],
  "red": [1, 1, 0, 1, 1],
  "green": [0,0, 2, 0, 1]
}
example = pd.DataFrame(example)

# 定义条件与对应赋值
cond_list = [
    ((example["blue"] == 1) | (example["red"] == 1)) & (example["green"] == 0)
]
choice_list = ["Flower A"]

# 生成新列,不满足条件的行默认填Flower B
example["flower type"] = np.select(cond_list, choice_list, default="Flower B")

print(example)

方法2:pandas loc 条件赋值(无需额外导入numpy)

先给整列赋默认值,再覆盖符合条件的行,逻辑直观易读:

# 整列赋默认值
example["flower type"] = "Flower B"
# 构造Flower A的判断掩码
flower_a_mask = ((example["blue"] == 1) | (example["red"] == 1)) & (example["green"] == 0)
# 覆盖符合条件的行
example.loc[flower_a_mask, "flower type"] = "Flower A"

注意:pandas向量化逻辑判断不能使用原生Python的and/or关键字,必须用&(与)、|(或),且每个独立判断条件需要用圆括号包裹,避免运算优先级报错。

核心问题答疑

  • 多层if结果赋值为新变量:逐行判断场景下无需在if块中打印结果,直接将目标值赋值给对应列位置即可,但逐行iloc遍历性能极差,万行以上数据运行速度会比向量化方法慢几十到上百倍,非特殊情况不建议使用。
  • 整表批量判断:上述两种方法均为pandas/numpy实现的向量化操作,会自动逐行匹配判断逻辑,不需要手动写循环取iloc单行值,代码更简洁、运行效率更高。

结果验证

两种方法运行后输出的DataFrame与预期结果完全一致:

blue  red  green flower type
0     1    1      0    Flower A
1     1    1      0    Flower A
2     0    0      2    Flower B
3     0    1      0    Flower A
4     1    1      1    Flower B

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:46:03