我想按周(星期日-星期六)对数据进行分组,并对该周的每一天进行求和。出于某种原因,Pandas并没有以我期望的方式分组。以下是从2023年2月12日星期日开始到2023年2月25日星期六结束的一些样本数据。我希望传入pd.Grouper(freq='W')
或pd.Grouper(freq='W-SUN')
,但它不使用常规周,除非我传入freq='W-SAT'
。
这是怎么回事?
$ python
Python 3.8.12 | packaged by conda-forge | (default, Oct 12 2021, 21:50:56)
[Clang 11.1.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>>
>>> S = pd.Series([1,2,3,70,2,3,4,5,6,10,20,4,9,1],
... pd.DatetimeIndex(['2023-02-%d' % d for d in range(12,26)]))
>>> S
2023-02-12 1
2023-02-13 2
2023-02-14 3
2023-02-15 70
2023-02-16 2
2023-02-17 3
2023-02-18 4
2023-02-19 5
2023-02-20 6
2023-02-21 10
2023-02-22 20
2023-02-23 4
2023-02-24 9
2023-02-25 1
dtype: int64
>>> S.groupby(pd.Grouper(freq='W-SUN',origin='start_day')).sum()
2023-02-12 1
2023-02-19 89
2023-02-26 50
Freq: W-SUN, dtype: int64
>>> S.groupby(pd.Grouper(freq='W-SAT',origin='start_day')).sum()
2023-02-18 85
2023-02-25 55
Freq: W-SAT, dtype: int64
1条答案
按热度按时间cu6pst1q1#
IIUC,功能按预期工作。为了简化约定,您传递的参数是您预计一周结束的日期。因此,对于星期日到星期六的一周,您确实需要
W-SAT
。在此指定。即使几周来它没有指定结束条件,对于以下锚点,它会指定:W-SAT每周频率(星期六)
(B)Q(S)-DEC季度频率,每年12月结束。与“Q”相同
(B)Q(S)-JAN季度频率,1月结束
使用
W-SAT
会导致聚合在星期日开始,一直运行到星期六,以完成7天。