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

Python DataFrame无法为连续数据创建分类分桶问题求助

DataFrame连续列分桶错误排查与修复

问题描述

我是Python新手,没法给DataFrame里的CURRENT_BALANCE连续数据列做分类分桶。用了下面的嵌套if循环代码,结果所有行都被分到了0-25k,求帮忙排查问题:

POS_Bucket = []
for elements in range(0,len(df['CURRENT_BALANCE'])):
    if elements <= 25000:
        POS_Bucket.append('0-25k')
    elif elements <= 50000:
        POS_Bucket.append('25k-50k')
    elif elements <= 75000:
        POS_Bucket.append('50k-75k')
    else:
        POS_Bracket.append('100k+')
df['POS_Bucket'] = POS_Bucket

错误输出如下:

CURRENT_BALANCE POS_Bucket
0   14563.60    0-25k
1   11821.56    0-25k
2   15137.84    0-25k
3   19230.03    0-25k
4   16465.54    0-25k
5   24075.32    0-25k
6   32743.42    0-25k
7   20940.93    0-25k
8   7587.90 0-25k
9   5996.65 0-25k
10  9880.96 0-25k
11  88134.33    0-25k
12  9877.01 0-25k
13  9871.71 0-25k
14  134955.88   0-25k
15  9880.96 0-25k
16  30336.07    0-25k
17  4792.58 0-25k
18  9244.03 0-25k
19  22151.48    0-25k
20  9028.78 0-25k
21  9847.32 0-25k
22  16970.26    0-25k
23  325830.34   0-25k
24  9847.32 0-25k

错误原因

  1. 循环变量用错:你遍历的是range(0, len(df['CURRENT_BALANCE'])),得到的是行索引的数值(0、1、2...),不是CURRENT_BALANCE列的实际余额值。所以只要索引小于25000,都会被分到0-25k,这就是所有结果一致的核心原因。
  2. 变量名笔误:最后一行用了POS_Bracket.append,但你的列表名是POS_Bucket,运行时会直接报错。

修复方案

方案1:修正循环逻辑

直接遍历CURRENT_BALANCE列的实际值,同时修正变量名笔误:

POS_Bucket = []
# 遍历余额列的每一个实际值
for balance in df['CURRENT_BALANCE']:
    if balance <= 25000:
        POS_Bucket.append('0-25k')
    elif balance <= 50000:
        POS_Bucket.append('25k-50k')
    elif balance <= 75000:
        POS_Bucket.append('50k-75k')
    else:
        POS_Bucket.append('100k+')
df['POS_Bucket'] = POS_Bucket

方案2:用Pandas内置方法pd.cut(更高效简洁)

Pandas专门提供了pd.cut函数处理连续数据分桶,不用手动写循环:

import pandas as pd

# 定义分桶区间:0-25k, 25k-50k, 50k-75k, 75k以上
bins = [0, 25000, 50000, 75000, float('inf')]
# 对应每个区间的标签
labels = ['0-25k', '25k-50k', '50k-75k', '100k+']

# 直接生成分桶列
df['POS_Bucket'] = pd.cut(df['CURRENT_BALANCE'], bins=bins, labels=labels, include_lowest=True)
  • include_lowest=True:确保数值刚好等于0的行能被分到第一个桶
  • float('inf'):匹配所有超过75000的数值,避免遗漏大额数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:09:16