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

如何用pandas按指定分箱规则为DataFrame列创建带标签新列

pandas分箱错误解决方案

错误原因

你出现报错和分箱数量不符的核心原因是bins参数定义错误:

  • 你将每个分箱的上下限单独拆分为独立的bin边界,最终生成的bin边界总数为29个,对应需要28个标签,和你定义的15个标签数量不匹配,因此抛出ValueError: Bin labels must be one fewer than the number of bin edges
  • 多余的bin边界会生成大量你不需要的空区间,导致最终分箱数量远高于预期的15个

解决方法

重新定义符合规则的bin边界,15个标签对应需要16个bin边界,同时调整pd.cut的区间开闭参数适配你的分箱规则:

步骤1:定义正确的bins和labels

你的分箱规则对应左闭右开区间,例如1.0 - 1.19等价于[1.0, 1.2),10.0+等价于[10.0, +∞),≤0的数值对应标签0,因此正确的bin边界为:

import numpy as np
labels = ['0','1.0 - 1.19' ,'1.2 – 1.39','1.4 – 1.59', '1.6 – 1.79','1.8 – 1.99','2.0 – 2.99','3.0 – 3.99','4.0 – 4.99','5.0 – 5.99','6.0 – 6.99','7.0 – 7.99','8.0 – 8.99','9.0 – 9.99','10.0+']
# 共16个bin边界,刚好匹配15个标签
bins = [-np.inf, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, np.inf]

步骤2:调用pd.cut生成分箱列

调整pd.cut参数适配区间规则,按列处理原有A-J列即可:

df[['new1','new2','new3','new4','new5','new6','new7','new8','new9','new10']] = df[['A', 'B', 'C','D','E','F','G','H','I','J']].apply(
    lambda col: pd.cut(
        col, 
        bins=bins, 
        labels=labels, 
        right=False, # 区间左闭右开,匹配你的数值覆盖规则
        include_lowest=True # 包含第一个区间的左边界,确保0值被正确分配
    )
)

运行上述代码即可生成符合预期的new1-new10列,不会再出现分箱数量不符和报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:27:04