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

Pandas Grouper结合多分类列实现重采样与分组聚合

Pandas周度重采样+分组聚合实现代码

前置说明

首先需要确保DataFrame的时间索引为DatetimeIndex类型,否则重采样逻辑无法正常执行。

完整实现代码

import pandas as pd

# --------------------------
# 若你已经有处理好的df,可跳过这段示例数据构造部分
# --------------------------
df = pd.DataFrame(
    [
        ['A', 'X', 'P', 12.0, 15.0, 20.0],
        ['B', 'Z', 'Q', 42.0, 43.0, 67.0],
        ['C', 'Y', 'R', 80.0, 15.0, 40.0],
        ['B', 'Z', 'R', 15.0, 55.0, 30.0],
        ['A', 'X', 'P', 11.0, 20.0, 22.0],
        ['A', 'Z', 'Q', 13.0, 10.0, 30.0]
    ],
    index=pd.to_datetime([
        '2018-01-01', '2018-01-02', '2018-01-03',
        '2018-01-04', '2018-01-05', '2018-01-06'
    ]),
    columns=['Cat1', 'Cat2', 'Cat3', 'Amount', 'Offset', 'Adjust']
)

# 定义聚合规则:分类列取分组首个值,数值列求和
agg_config = {
    'Cat3': 'first',
    'Amount': 'sum',
    'Offset': 'sum',
    'Adjust': 'sum'
}

# 执行周度重采样+分组聚合
# 注:默认'W'以周日为周截止日,示例中2018-01-06为周六,因此用'W-SAT'对齐示例输出的周节点
result = df.resample('W-SAT').groupby(['Cat1', 'Cat2']).agg(agg_config).sort_index()

结果说明

执行后得到的result为多层索引结构:

  • 第一层索引为周度时间节点,和示例给出的2018-01-06节点完全对齐
  • 第二层、第三层索引为分组字段Cat1、Cat2
  • 列值完全符合要求:Cat3取分组内第一条记录的取值,三个数值列为分组内所有记录的求和结果
    • 比如A-X分组的计算结果为Cat3=P, Amount=23.0, Offset=35.0, Adjust=42.0,和示例完全匹配
    • 你示例中B-Z分组的Adjust值写为107.0属于笔误,实际计算结果为67.0+30.0=97.0

可调参数说明

  • 如果你的周度统计规则需要调整周起始/截止日,修改resample()的频率参数即可,比如W-MON代表以周一为周截止日
  • 如果有新增列:分类列就在agg_config中添加'列名': 'first',数值列添加'列名': 'sum'即可
  • 如果不需要多层索引展示,可在最后追加.reset_index()将所有索引转为普通列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:45:33