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
相关产品推荐
相关产品推荐

