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

Pandas如何实现跨年度按月重采样汇总多年时间序列数据

问题核心

resample('M')的聚合粒度是「年-月」,会将不同年份的同月份判定为独立分组,因此N年的数据会返回N*12行结果,无法实现跨年度按1-12自然月汇总的需求。

正确实现

单序列场景(对应最小可复现示例)

直接提取时间索引的月份属性作为分组键,聚合后仅返回12行结果,对应1-12月的跨年度汇总值:

import pandas as pd

# 测试数据
index = pd.date_range('1/1/2000', periods=730, freq='D')
series = pd.Series(range(730), index=index)

# 跨年度按自然月求和
monthly_total = series.groupby(series.index.month).sum()
  • 分组键series.index.month会返回每条数据对应的月份数字(1为1月,12为12月),自动忽略年份差异
  • 如果需要输出月份名称而非数字,可将分组键替换为series.index.strftime('%B')(输出全称如January)或series.index.strftime('%b')(输出缩写如Jan)

带门店维度的DataFrame场景

按「门店+自然月」双维度分组即可,无需先做重采样:

# 每个门店返回12行跨年度月度销售额汇总
df = df.groupby(
    [
        'store',
        df.index.month.rename('month')
    ]
)['sales'].sum().reset_index()

补充:如果后续需要按「年-月」粒度做单月统计(即原来resample实现的效果),可以直接用df.groupby([df.index.year, df.index.month])实现,灵活度更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:48:32