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

Pandas多索引列下日度转月度再转年度重采样方法问询

基于月度聚合数据生成年度统计的解决方案

你需要基于已有的月度聚合数据dfm(而非原始日度数据)计算年度统计,这样得到的min、max、mean都是月度级别的汇总值,而非无参考价值的日度值。

解决方案代码

import pandas as pd

# 创建示例数据框
df = pd.DataFrame({'date' : pd.date_range(start='1/1/2023', end='12/31/2023', freq='D'),
                   'code' : [1,2,3,4,5] * 73,
                   'value': range(365)})

# 设置date为索引
df = df.set_index('date')

# 生成月度聚合数据dfm
dfm = df.groupby('code').resample("M").agg({
    'value': ['sum', 'min', 'mean', 'max'], 
}).round()

# --- 核心步骤:基于dfm生成年度统计dfm_y ---
# 1. 从dfm的索引中提取年份,作为分组依据
year_groups = dfm.index.get_level_values('date').dt.year

# 2. 按code和年份分组,对月度指标做年度聚合
dfm_y = dfm.groupby(['code', year_groups]).agg(
    # 年度总支出:所有月度sum的总和
    annual_total=(('value', 'sum'), 'sum'),
    # 年度内月度支出总和的统计
    monthly_sum_min=(('value', 'sum'), 'min'),
    monthly_sum_max=(('value', 'sum'), 'max'),
    monthly_sum_mean=(('value', 'sum'), 'mean'),
    # 年度内月度日度最小值的统计(全年各月度最低日支出的最小值)
    monthly_day_min=(('value', 'min'), 'min'),
    # 年度内月度日均支出的平均值
    monthly_day_mean=(('value', 'mean'), 'mean'),
    # 年度内月度日度最大值的统计(全年各月度最高日支出的最大值)
    monthly_day_max=(('value', 'max'), 'max')
).round()

# 可选:重置索引让结果更易读
dfm_y = dfm_y.reset_index().rename(columns={'level_1': 'year'})

关键说明

  • 直接从dfm(月度聚合结果)分组,而非原始日度数据,确保所有统计值都是基于月度汇总后的计算。
  • 使用多索引列的元组(('value', 'sum'), 'min')指定:对dfm中value下的sum列(即月度支出总和),计算年度内的最小值。
  • 最后重置索引可以把年份从索引转为列,让结果更直观。

内容的提问来源于stack exchange,提问作者Phil P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:13:23