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

Pandas技巧:如何按月份分组汇总Datetime索引的DataFrame数据?

按Datetime索引将周度DataFrame汇总为月度数据的解决方法

问题描述

我有一个以日期时间(Datetime)为行索引的小型DataFrame,希望将每周的数据汇总为月度数据,但不知如何按索引分组,数据示例如下:

A       B       C       D
Date                                      
2023-01-08  0.0000  0.7075  0.0000   0.000
2023-01-15  0.0000  1.0000  0.0000   0.000
2023-01-22  0.0000  1.0000  0.0000   0.000
2023-01-29  0.0325  0.9300  0.0000   0.025
2023-02-05  0.0250  0.9750  0.0000   0.000
2023-02-12  0.0050  0.5450  0.0000   0.000
2023-02-19  0.0000  0.1800  0.0000   0.000
2023-02-26  0.0000  0.0000  0.0000   0.000
2023-03-05  0.0000  0.0000  0.0000   0.000
2023-03-12  0.0000  0.0000  0.0000   0.000
2023-03-19  0.0000  0.0000  0.0000   0.000
2023-03-26  0.0000  0.4375  0.1875   0.000

解决方法

Pandas提供了两种简洁的方式实现时间序列的月度聚合,前提是你的DataFrame行索引已经是datetime类型(如果不是,先执行df.index = pd.to_datetime(df.index)转换)。

方法1:使用resample方法

resample是Pandas专门为时间序列设计的聚合工具,语法直观:

# 按月度汇总,求和(可替换为mean/max/min等聚合函数)
monthly_df = df.resample('M').sum()
  • 参数'M'表示按日历月分组,结果的索引会是每个月的最后一天(如2023-01-31)。
  • 替换sum()为你需要的聚合逻辑,比如求月度平均值用mean(),求最大值用max()。

方法2:使用groupby + Grouper

如果需要更灵活的分组逻辑(比如结合其他字段分组),可以用pd.Grouper:

import pandas as pd

# 按月度索引分组并求和
monthly_df = df.groupby(pd.Grouper(freq='M')).sum()
  • pd.Grouper(freq='M')指定按月度频率分组,效果和resample('M')一致,适合复杂场景。

示例输出

对提供的示例数据执行resample('M').sum()后,结果如下:

A       B       C      D
Date                                    
2023-01-31  0.0325  3.6375  0.0000  0.025
2023-02-28  0.0300  1.7000  0.0000  0.000
2023-03-31  0.0000  0.4375  0.1875  0.000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:57:37