我正在尝试创建一个报告,该报告按每年的星期几分组。
我有一个如下所示的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
答案 0 :(得分:1)
如果您想在索引中使用dayOfWeek
和year
名称,可以为其分配:
>>> 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