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

Pandas DataFrame重分箱:合并粗区间并求和计数及方差列

Pandas 重分箱并聚合区间数据解决方案

我来帮你搞定这个分箱聚合的需求!针对你需要将现有DataFrame按指定新区间重分箱,并对n和v求和的需求,这里提供一个灵活适配非规整数据的实现方案:

核心思路

  1. 定义目标分箱的边界与对应左标签
  2. 将原数据的E值匹配到目标分箱区间
  3. 按目标区间分组对n和v求和
  4. 确保所有目标区间都存在(即使原数据缺失对应行)

代码实现

1. 导入依赖并构造示例数据

import pandas as pd

# 示例输入数据(你可以替换成自己的DataFrame)
df = pd.DataFrame({
    'E': [200.0, 300.0, 400.0, 500.0, 600.0, 800.0, 900.0, 1000.0, 1100.0],
    'n': [26.0, 56.0, 62.0, 55.0, 24.0, 12.0, 8.0, 4.0, 1.0],
    'v': [1.3, 2.2, 2.5, 2.2, 1.7, 1.3, 0.9, 0.6, 0.2]
})

2. 定义目标分箱规则

# 目标分箱边界:[200,300), [300,400), [400,600), [600,1000), [1000, +∞)
target_bins = [200, 300, 400, 600, 1000, float('inf')]
# 对应区间的左边界标签(即输出的E列值)
target_labels = [200.0, 300.0, 400.0, 600.0, 1000.0]

3. 匹配分箱并聚合求和

# 将原数据的E值映射到目标分箱的左标签(right=False表示左闭右开区间)
df['target_E'] = pd.cut(df['E'], bins=target_bins, labels=target_labels, right=False)

# 按目标标签分组,对n和v求和
aggregated = df.groupby('target_E')[['n', 'v']].sum().reset_index()

# 重命名列名以匹配期望输出
aggregated.rename(columns={'target_E': 'E'}, inplace=True)

4. 适配非规整数据(补全缺失区间)

如果你的原DataFrame可能缺失某些区间的行,我们可以构造一个包含所有目标区间的基准DataFrame,通过合并确保结果完整性:

# 构造包含所有目标区间的基准表
base_df = pd.DataFrame({'E': target_labels})

# 左合并基准表与聚合结果,缺失值填充为0(可根据业务调整)
final_result = base_df.merge(aggregated, on='E', how='left').fillna(0)

输出结果

运行上述代码后,final_result就是你需要的格式:

E     n    v
0  200.0  26.0  1.3
1  300.0  56.0  2.2
2  400.0  117.0 4.7
3  600.0  44.0  3.9
4  1000.0 5.0   0.8

关键说明

  • pd.cut的right=False参数确保区间逻辑和你原数据的左边界定义一致(比如E=500会被分到[400,600)区间,对应标签400)
  • 合并基准表的步骤可以保证即使原数据没有某个区间的数据,结果中也会保留该区间,且n和v为0(可根据需求修改填充值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:22:44