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

如何按行数将Pandas DataFrame划分为指定数量分箱并添加分箱编号

给已排序DataFrame按行数添加分箱编号的简单方法

嘿,这个需求处理起来超简单,利用Pandas和NumPy的内置工具就能快速搞定,不用手动去计算每行的归属~

方法一:用pd.cut快速生成箱号

这是最直接的方式,因为你的DataFrame已经按需求排好序了,我们只需要基于行的位置来划分10个分箱:

import pandas as pd

# 假设你的已排序DataFrame名为df
df['bin_number'] = pd.cut(range(len(df)), bins=10, labels=False) + 1

代码解释:

  • range(len(df))生成从0到总行数-1的序列,代表每行的位置索引;
  • pd.cut(..., bins=10)把这个位置序列均匀分成10个区间,自动处理“最后一个分箱不满”的情况;
  • labels=False让返回结果是从0开始的整数索引,加1是为了让箱号从1开始(更符合日常计数习惯,如果你习惯从0开始可以去掉+1)。

方法二:用numpy.digitize自定义分割点

如果你想更清晰地控制分箱的分割位置,可以用NumPy来生成分割点,再分配箱号:

import numpy as np

# 生成11个分割点(把总行数分成10段)
bins = np.linspace(0, len(df), 11, dtype=int)
# 给每行分配对应的箱号
df['bin_number'] = np.digitize(range(len(df)), bins, right=False)

代码解释:

  • np.linspace(0, len(df), 11)会生成如[0, 400, 800, ..., 4000]这样的分割点(如果总行数刚好4000);
  • np.digitize(..., right=False)采用左闭右开的区间规则,确保每行被正确分配到对应的分箱中。

后续聚合操作

添加完bin_number列后,你就可以直接用分组聚合做后续分析了,比如:

# 示例:计算每个分箱的某列均值、总和
agg_result = df.groupby('bin_number').agg({
    'target_column': ['mean', 'sum'],
    'another_column': 'count'
})

这样就能轻松完成按行等分箱+分组聚合的需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:16:01