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

基于索引范围聚合Pandas数据:分箱求均值与求和

大型DataFrame分箱处理方案

问题背景

有一个包含5万多行的大型DataFrame,示例数据如下:

CallType    Broadcast   C1  C2  Csk Data    Netd2   Net3    OpenP1  OpenP2  OpenP8  SBD Voice
LFrame                                              
0   85.811985   0.820731    0.479020    0.550982    23.95   0.0 4.79    32.338503   23.573862   8.462412    6.696933    3.781450
22  0.000000    1.143358    0.303666    0.375464    28.74   0.0 9.58    29.013984   32.640732   8.462412    5.993194    2.666097
44  99.160516   0.918363    0.889132    0.489427    28.74   0.0 4.79    28.107297   33.849648   6.044580    4.790000    0.000000
66  0.000000    0.923886    0.983070    0.675550    28.74   0.0 9.58    27.805068   27.805068   5.440122    13.328801   4.984644

需求:按binsize=600对索引LFrame进行分箱(每组600行),生成的新DataFrame中:

  • LFrame取每组的平均值作为新索引
  • 其余所有列取每组的求和值

尝试过pivot_table和groupby方法未实现需求,期望结果格式如下:

CallType    Broadcast   Certus1 Certus2 Certus8apsk Data    Netted2 Netted3 OpenPort1   OpenPort2   OpenPort8   ShortBurstData  Voice
LFrame                                              
300 585.811985  440.820731  0.479020    340.550982  4323.95 0.0 4.79    3332.338503 23.573862   308.462412  346.696933  7733.781450
900 1230.0000   341.143358  430.303666  430.375464  2448.74 0.0 9.58    3329.013984 32.640732   408.462412  345.993194  942.666097
1200    4099.160516 340.918363  730.889132  430.489427  4428.74 0.0 4.79    4428.107297 33.849648   406.044580  434.790000  340.0000
1500    400.0000    340.923886  0.983070    4430.675550 3428.74 0.0 9.58    2447.805068 2437.805068 4405.440122 343413.328801   334.984644

解决方案

通过手动创建分组键结合groupby的自定义聚合逻辑即可实现,步骤如下:

代码实现

# 重置索引,将原索引LFrame转为列便于处理
df_reset = df.reset_index()

# 定义分箱大小,生成分组键:每600行一组
binsize = 600
df_reset['group'] = df_reset.index // binsize

# 自定义聚合规则:LFrame取均值,其余列取求和
agg_result = df_reset.groupby('group').agg(
    LFrame=('LFrame', 'mean'),
    **{col: (col, 'sum') for col in df_reset.columns if col not in ['LFrame', 'group']}
)

# 将LFrame设置为新索引,匹配需求格式
agg_result = agg_result.set_index('LFrame')

# 若需要将索引值取整(和示例中的300、900一致),可添加以下代码
# agg_result.index = agg_result.index.round().astype(int)

关键说明

  1. 按行号分组:用df_reset.index // binsize生成分组键,确保严格按每600行一组划分,不受LFrame数值是否连续的影响
  2. 批量聚合规则:通过字典推导式自动生成所有非目标列的求和规则,避免手动罗列列名
  3. 索引转换:重置索引后处理聚合,再将LFrame均值设为新索引,完全匹配需求格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:03:12