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

Python中np.where多条件创建DataFrame新列报错解决方法

报错原因

你的代码存在4个核心问题,直接触发报错或导致计算结果错误:

  • 列名、变量名引用错误:规则中使用的字段为Quantity Total Price,代码中误写为Quantity Total First,还引用了当前上下文中不存在的data_state2变量
  • np.where用法不符合规范:np.where仅支持单条件双分支判断,不支持直接传入多条件列表匹配多结果值,传入的条件列表长度和DataFrame索引长度不匹配,直接触发ValueError
  • 区间规则不严谨:自定义的条件存在边界重叠、区间遗漏问题,没有覆盖大于60亿的取值区间,边界判断不符合左开右闭的规则要求
  • 赋值逻辑错误:直接对merged['Rate1']字段赋值会覆盖原始Rate1值,后续权重计算会读取到被修改后的值,导致结果偏差
可直接运行的正确代码

优先推荐使用pd.cut实现分箱计算,逻辑清晰不易出现边界错误:

import pandas as pd
import numpy as np

# 定义区间边界、每个区间对应的Rate权重(Rate1权重 = 1 - Rate权重)
bins = [0, 50000000, 500000000, 2000000000, 4000000000, 6000000000, 99999999999999]
rate_weights = [1, 0.9, 0.8, 0.5, 0.25, 0]

# 备份原始Rate1值,避免覆盖导致计算错误
original_rate1 = merged['Rate1'].copy()

# 分箱匹配对应权重
merged['最终费率'] = pd.cut(
    merged['Quantity Total Price'],
    bins=bins,
    labels=rate_weights,
    include_lowest=True
).astype(float)

# 按权重计算最终结果
merged['最终费率'] = merged['Rate'] * merged['最终费率'] + original_rate1 * (1 - merged['最终费率'])

如果需要使用np.where实现,可使用嵌套写法,同样可以得到正确结果:

original_rate1 = merged['Rate1'].copy()
qtp = merged['Quantity Total Price']

merged['最终费率'] = np.where(
    qtp <= 50000000,
    merged['Rate'],
    np.where(
        qtp <= 500000000,
        merged['Rate']*0.9 + original_rate1*0.1,
        np.where(
            qtp <= 2000000000,
            merged['Rate']*0.8 + original_rate1*0.2,
            np.where(
                qtp <= 4000000000,
                merged['Rate']*0.5 + original_rate1*0.5,
                np.where(
                    qtp <= 6000000000,
                    merged['Rate']*0.25 + original_rate1*0.75,
                    original_rate1
                )
            )
        )
    )
)
结果校验

用你给出的测试样例验证,计算结果完全匹配预期:

  • 数量总价20000000 → 结果15
  • 数量总价100000000 → 结果14.95
  • 数量总价700000000 → 结果14.9
  • 数量总价3000000000 → 结果14.75
  • 数量总价5000000000 → 结果14.625
  • 数量总价7000000000 → 结果14.5

注意:禁止直接覆盖原始Rate1列存储计算结果,否则计算过程中会读取到被修改的Rate1值,导致权重计算偏差,建议新建独立列存储最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:51:21