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

pandas interval类型距离分箱计算累计值与累计百分比方案

实现步骤

1. 先对DataFrame按分箱列排序

interval类型原生支持大小比较,直接按distance_bin排序即可保证分箱顺序从小到大:

import pandas as pd
# 按分箱从小到大排序,重置索引避免后续逻辑出错
df = df.sort_values("distance_bin").reset_index(drop=True)

2. 计算累计对象总数和累计百分比

这两个都是数值字段,直接用cumsum方法即可实现滚动累计:

# 累计对象总数
df["累计对象总数"] = df["分箱内对象数"].cumsum()
# 累计百分比,如果需要转百分比展示可额外加format处理
df["累计百分比"] = df["分箱占比"].cumsum()

3. 生成累计分箱范围

不需要用expanding方法,直接提取最小分箱的左边界,和当前行分箱的右边界拼接为新的interval即可,同时保持和原分箱一致的开闭规则:

# 提取全量最小分箱的左边界
min_bin_left = df["distance_bin"].iloc[0].left
# 逐行拼接累计区间
df["累计分箱范围"] = df["distance_bin"].apply(
    lambda x: pd.Interval(left=min_bin_left, right=x.right, closed=x.closed)
)
效果示例

假设原输入数据如下:

distance_bin分箱内对象数分箱占比
(0.0, 10.0]100.1
(10.0, 20.0]200.2
(20.0, 30.0]300.3
(30.0, 40.0]400.4

处理后输出结果:

distance_bin分箱内对象数分箱占比累计对象总数累计百分比累计分箱范围
(0.0, 10.0]100.1100.1(0.0, 10.0]
(10.0, 20.0]200.2300.3(0.0, 20.0]
(20.0, 30.0]300.3600.6(0.0, 30.0]
(30.0, 40.0]400.41001.0(0.0, 40.0]
原理说明

pandas的expanding方法默认针对数值类型做滚动聚合,interval属于自定义复合类型,没有默认的累加规则,因此不用硬套expanding方法,单独处理区间列的逻辑更简单高效。

内容的提问来源于stack exchange,提问作者Serge de Gosson de Varennes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:48:02