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

如何用Pandas高效实现GroupBy与多维度Agg聚合(含SB列透视)

高效实现分组聚合与SB列转换方案

针对超大型数据集的需求,直接用Pandas的矢量化分组+转置操作就能搞定,完全不用逐行循环,效率拉满:

核心思路

  1. 先过滤SB范围(确保只保留1-4,减少无效计算)
  2. 分两步完成聚合:
    • 对Total_Pwr、Channels_Act、Channels_Assigned按LFrame直接求和
    • 对Pwr按LFrame+SB分组求和后,将SB维度转成列(缺失的SB自动填充0)
  3. 把两个聚合结果按LFrame合并,得到最终数据集

代码实现

假设你的数据集是Pandas DataFrame格式,列包含LFrame、SB、Pwr、Total_Pwr、Channels_Act、Channels_Assigned:

import pandas as pd

# 过滤SB范围(固定1-4),避免多余数据干扰计算
df = df[df['SB'].isin(range(1, 5))]

# 聚合SB对应的Pwr总和,将SB转成列,缺失值填0
sb_pwr_summary = df.groupby(['LFrame', 'SB'])['Pwr'].sum().unstack(level='SB', fill_value=0)
# 重命名SB列,方便识别
sb_pwr_summary.columns = [f'SB_{sb}' for sb in sb_pwr_summary.columns]

# 聚合其余三个字段的总和
other_summary = df.groupby('LFrame')[['Total_Pwr', 'Channels_Act', 'Channels_Assigned']].sum()

# 合并两个结果(索引均为LFrame,直接join即可)
final_result = other_summary.join(sb_pwr_summary)

可选简化方案(用pivot_table一步到位)

如果想减少代码行数,也可以用pivot_table一次性完成所有聚合,适合字段较少的场景:

final_result = pd.pivot_table(
    df[df['SB'].isin(range(1,5))],
    index='LFrame',
    values=['Pwr', 'Total_Pwr', 'Channels_Act', 'Channels_Assigned'],
    columns='SB',
    aggfunc={
        'Pwr': 'sum',
        'Total_Pwr': 'sum',
        'Channels_Act': 'sum',
        'Channels_Assigned': 'sum'
    },
    fill_value=0
)
# 展平多层列名,方便后续使用
final_result.columns = [f'{metric}_SB_{sb}' if sb is not None else metric for metric, sb in final_result.columns]

效率说明

以上操作都是Pandas的矢量化计算,底层基于C实现,比Python逐行循环快数个数量级,完全适配超大型数据集的处理需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:55:00