熊猫重新采样/按星期和年份分组

时间:2018-11-14 17:47:07

标签: python-3.x pandas pandas-groupby

我正在尝试创建一个报告,该报告按每年的星期几分组。

我有一个如下所示的df:

                        s1      s2   srd
dt          
2004-02-04 11:21:00 2365.79 2372.37 -7.0
2004-02-05 10:15:00 2365.79 2368.03 -2.0
2004-02-17 06:43:00 2421.05 2425.26 -4.0
2004-02-17 12:43:00 2418.42 2420.53 -2.0
2004-02-17 12:44:00 2420.39 2420.53 -0.0

dt索引采用日期时间格式。

我正在寻找的是一个看起来像这样的数据框(我只需要srd列,并且可以对函数进行分组就可以是任何东西,例如sum,count等):

                  srd
dayOfWeek  year         
Mon        2004    10
           2005    11
           2006    8
           2007    120
Tues       2004    105
           2005    105

我尝试过dayOfWeekDf = df.resample('B'),但是得到的数据框看起来像是按周数分割的。

我也尝试过df.groupby([df.index.weekday, df.index.year])['srd'].transform('sum'),但是由于以下原因,它甚至没有分组(2月17日出现3次)。

                    srd
dt  
2004-02-04 11:21:00 81.0
2004-02-05 10:15:00 203.0
2004-02-17 06:43:00 37.0
2004-02-17 12:43:00 37.0
2004-02-17 12:44:00 37.0

1 个答案:

答案 0 :(得分:1)

如果您想在索引中使用dayOfWeekyear名称,可以为其分配:

>>> df.assign(year=df.index.year, dayOfWeek = df.index.weekday_name).groupby(['dayOfWeek','year']).srd.sum()
dayOfWeek  year
Thursday   2004   -2.0
Tuesday    2004   -6.0
Wednesday  2004   -7.0
Name: srd, dtype: float64

否则,您可以使用自己的操作方式,但是省略transform

>>> df.groupby([df.index.weekday_name, df.index.year])['srd'].sum()
dt         dt  
Thursday   2004   -2.0
Tuesday    2004   -6.0
Wednesday  2004   -7.0
Name: srd, dtype: float64