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

如何在Pandas中基于多条件与计算创建折扣列?

在Pandas中基于多列多规则创建折扣列的最优方法

处理这类多规则的列生成需求,**numpy.select()**是最优方案——它采用向量化运算,性能远高于循环或apply()方法,同时代码结构清晰,规则与结果对应明确,便于后续维护调整。

实现步骤

  1. 导入依赖库
import pandas as pd
import numpy as np
  1. 定义规则条件与对应折扣值
    按规则的优先级排序(越具体的规则越靠前,避免被宽泛规则覆盖),依次定义条件列表和对应的折扣结果列表:
# 定义匹配条件
conditions = [
    # 规则3:Unique id为4094、品牌为E且years_active为空
    (df["Unique id"] == 4094) & (df["品牌"] == "E") & df["years_active"].isna(),
    # 规则2子项1:Unique id为6352/7869,价格60≤price<70
    (df["Unique id"].isin([6352, 7869])) & (df["price"].between(60, 70, inclusive="left")),
    # 规则2子项2:Unique id为6352/7869,价格70≤price<80
    (df["Unique id"].isin([6352, 7869])) & (df["price"].between(70, 80, inclusive="left")),
    # 规则1:品牌为A或B
    df["品牌"].isin(["A", "B"])
]

# 对应每个条件的折扣值
choices = [
    df["price"],          # 规则3:折扣等于原价
    10,                   # 规则2子项1:固定折扣10
    20,                   # 规则2子项2:固定折扣20
    df["price"] * 0.2     # 规则1:原价的20%
]
  1. 生成折扣列
    使用np.select()匹配条件并赋值,同时设置无匹配规则时的默认值(示例设为0,可根据业务需求调整为np.nan或其他值):
df["折扣"] = np.select(conditions, choices, default=0)

示例验证

假设你的数据如下:

Unique id品牌priceyears_active
6352C655
7869A753
4094E100NaN
1234B502
5678D904

运行代码后生成的折扣列结果:

折扣
10
20
100
10
0

核心优势

  • 性能高效:向量化运算避免了逐行遍历,处理大数据集时速度提升明显;
  • 逻辑清晰:条件与结果一一对应,规则调整只需修改conditions和choices的顺序或内容;
  • 灵活性强:可通过调整条件顺序改变规则优先级,默认值也能适配不同业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:43:09