首页 > 解决方案 > Pandas 中是否有从特定日期开始按月分组的方法?

问题描述

我试图在 python 中按月对一些数据进行分组,但我需要从每月 25 日开始的月份,有没有办法在 Pandas 中做到这一点?

几个星期有一种从星期一、星期二开始的方法……但几个月来总是整月。

pd.Grouper(key='date', freq='M')

标签: pandaspandas-groupby

解决方案


我准备了以下测试DataFrame:

         Dat  Val
0 2017-03-24    0
1 2017-03-25    0
2 2017-03-26    1
3 2017-03-27    0
4 2017-04-24    0
5 2017-04-25    0
6 2017-05-24    0
7 2017-05-25    2
8 2017-05-26    0

第一步是计算“移位日期”列:

df['Dat2'] = df.Dat + pd.DateOffset(days=-24)

结果是:

         Dat  Val       Dat2
0 2017-03-24    0 2017-02-28
1 2017-03-25    0 2017-03-01
2 2017-03-26    1 2017-03-02
3 2017-03-27    0 2017-03-03
4 2017-04-24    0 2017-03-31
5 2017-04-25    0 2017-04-01
6 2017-05-24    0 2017-04-30
7 2017-05-25    2 2017-05-01
8 2017-05-26    0 2017-05-02

如您所见,Dat2中的三月日期仅从原始日期2017-03-25开始,依此类推。

1的值是在 3 月(Dat2),2的值是在 5 月(也是Dat2)。

然后,要计算例如按月计算的总和,我们可以运行:

df.groupby(pd.Grouper(key='Dat2', freq='MS')).sum()

得到:

            Val
Dat2           
2017-02-01    0
2017-03-01    1
2017-04-01    0
2017-05-01    2

所以我们有正确的分组:

  • 1是在三月,
  • 2是在五月。

与其他答案相比,优势在于您在一个月的第一天拥有所有日期,当然请记住,例如结果中的2017-03-01表示从2017-03-252017-04-24的期间(包含)。


推荐阅读