【问题标题】:Pandas resample/groupby day of week and yearPandas 重新采样/分组按星期几和年份
【发布时间】:2018-11-15 01:54:11
【问题描述】:

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

我有一个看起来像这样的 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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 2018-09-11
      • 2019-06-30
      • 1970-01-01
      相关资源
      最近更新 更多