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

如何在Pandas中实现浮点数滚动重叠分箱及类别计数

高效实现滚动重叠区间分箱统计

针对你遇到的pd.cut不支持重叠区间的问题,这里提供一套基于numpy向量化操作的高效方案,适配数十万至百万行的大数据集:

核心思路

放弃pd.cut+groupby的组合,改用numpy广播快速判断每个数据点所属的所有重叠区间,再通过矩阵乘法完成批量统计,全程避免循环,保证运算效率。

代码实现

import pandas as pd
import numpy as np

# 示例数据集
data = pd.DataFrame({
    'FltVal': [0.01, 0.02, 0.05, 0.31, 0.36, 0.37, 0.41],
    'Category': ['A', 'A', 'B', 'B', 'A', 'C', 'B']
})

# 1. 生成所有需要的区间起始点
min_val = data['FltVal'].min()
max_val = data['FltVal'].max()
# 区间为(x, x+0.3],所以起始点x的范围是从min_val到max_val-0.3,步长0.01
x_start = np.arange(min_val, max_val - 0.3 + 0.01, 0.01)
# 生成可读性强的区间字符串
intervals = [f"({x:.2f}, {x+0.3:.2f}]" for x in x_start]

# 2. 向量化判断每个数据点所属区间
flt_vals = data['FltVal'].values
# 广播生成(n_samples, n_intervals)的布尔矩阵,True表示数据点属于对应区间
in_interval = (flt_vals[:, None] > x_start) & (flt_vals[:, None] <= x_start + 0.3)

# 3. 统计各区间的总记录数
total_counts = in_interval.sum(axis=0)

# 4. 统计各区间内的Category分布
# 把Category转为one-hot编码矩阵
cat_dummies = pd.get_dummies(data['Category']).values
# 矩阵乘法批量计算每个区间的类别计数
cat_counts = in_interval.T @ cat_dummies
cat_counts_df = pd.DataFrame(cat_counts, columns=pd.get_dummies(data['Category']).columns)

# 5. 合并结果并过滤空区间
result = pd.DataFrame({
    '分箱区间': intervals,
    '分箱内记录总数': total_counts
}).join(cat_counts_df)
# 可选:过滤掉没有数据的区间
result = result[result['分箱内记录总数'] > 0].reset_index(drop=True)

print(result)

关键优势

  • 高效性:所有核心运算都是numpy的向量化操作,底层基于C实现,处理百万级数据仅需数秒
  • 灵活性:可轻松调整区间大小、步长,无需修改核心逻辑
  • 可读性:生成的区间字符串清晰直观,统计结果直接对应需求

输出示例

分箱区间分箱内记录总数ABC
(0.01, 0.31]3210
(0.02, 0.32]3210
(0.03, 0.33]3210
...............
(0.11, 0.41]5230
(0.37, 0.67]1010

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:42:55