我需要按周分组,但是像这样的一周(一年中的第一周)跨度为2018年和2019年。

通常,我会执行以下操作:

df.groupby([df.DATE.dt.year,df.DATE.dt.week]).sum()


结果是将一周表示为输出中的两个单独的星期。我敢肯定我可以使用IF语句强行使用,但是我想知道在这些年份的过渡期间是否有更干净的方式按周分组。

最佳答案

您可以将日期转换为熊猫Period对象,然后对它们进行分组。

df = pd.DataFrame(
    {'Date': pd.DatetimeIndex(start='2018-12-24', end='2019-01-05', freq='d'),
     'Data': [1] * 8 + [2] * 5})
>>> df
         Date  Data
0  2018-12-24     1
1  2018-12-25     1
2  2018-12-26     1
3  2018-12-27     1
4  2018-12-28     1
5  2018-12-29     1
6  2018-12-30     1
7  2018-12-31     1
8  2019-01-01     2
9  2019-01-02     2
10 2019-01-03     2
11 2019-01-04     2
12 2019-01-05     2

>>> (df
     .assign(period=pd.PeriodIndex(df['Date'], freq='W-Sun'))  # Weekly periods ending Sundays.
     .groupby('period')['Data'].mean())
period
2018-12-24/2018-12-30    1.000000
2018-12-31/2019-01-06    1.833333  # (1 * 1 + 2 * 5) / 6 = 1.833
Freq: W-SUN, Name: Data, dtype: float64


请注意,在上面的示例中,最后期限只有六天。

关于python - 当星期数超过一年时,如何按周使用Pandas groupby,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54057967/

10-09 02:29