使用 python 的年度聚合周(周从 01 01 YYYY 开始)

week of the year aggregation using python (week starts from 01 01 YYYY)

我在之前的问题中搜索,并没有解决我正在搜索的问题,请你帮助我

我有一个来自

的数据集
    Date         T2M    Y       T       F        H       G     Week_Number
0   1981-01-01  11.08   17.35   6.94    0.00    5.37    4.63    1
1   1981-01-02  10.82   16.41   7.51    0.00    5.55    2.73    1
2   1981-01-03  10.74   15.64   7.35    0.00    6.23    2.33    1
3   1981-01-04  11.17   15.99   8.46    0.00    6.16    1.66    1
4   1981-01-05  10.20   15.60   6.87    0.12    6.10    2.78    2
5   1981-01-06  10.35   16.16   5.95    0.00    6.59    3.92    2
6   1981-01-07  12.26   18.24   9.30    0.00    6.10    2.30    2
7   1981-01-08  12.76   19.23   8.72    0.00    6.29    3.96    2
8   1981-01-09  12.61   17.80   8.90    0.00    6.71    2.05    2

我已经使用此代码创建了周数列

df['Week_Number'] = df['Date'].dt.week

但它只给我设计第一周的一年的前四天,也许这意味着一周从星期一开始。在我的案例中,如果它从星期一或另一天开始,我不会给予兴趣,我只想每 7 天细分一次(每年每 7 天分组一次,例如从 1 1 1980 到 07 1 1980 FISRT WEEK,然后继续, 并且每年的第一周也从 1 1 xxxx

开始

如果您希望周数从 1 月 1 日开始,而不考虑星期几,只需获取一年中的第几天,减去 1 并计算除以 7 的整数:

df['Date'] = pd.to_datetime(df['Date'])
df['week_number'] = df['Date'].dt.dayofyear.sub(1).floordiv(7).add(1)

注意。如果您希望第一周以 0

开头,则无需加 1

输出:

        Date    T2M      Y     T     F     H     G  Week_Number  week_number
0 1981-01-01  11.08  17.35  6.94  0.00  5.37  4.63            1            1
1 1981-01-02  10.82  16.41  7.51  0.00  5.55  2.73            1            1
2 1981-01-03  10.74  15.64  7.35  0.00  6.23  2.33            1            1
3 1981-01-04  11.17  15.99  8.46  0.00  6.16  1.66            1            1
4 1981-01-05  10.20  15.60  6.87  0.12  6.10  2.78            2            1
5 1981-01-06  10.35  16.16  5.95  0.00  6.59  3.92            2            1
6 1981-01-07  12.26  18.24  9.30  0.00  6.10  2.30            2            1
7 1981-01-08  12.76  19.23  8.72  0.00  6.29  3.96            2            2
8 1981-01-09  12.61  17.80  8.90  0.00  6.71  2.05            2            2

然后可以使用新的列来groupby,例如:

df.groupby('week_number').agg({'Date': ['min', 'max'], 'T2M': 'sum'})

输出:

                  Date               T2M
                   min        max    sum
week_number                             
1           1981-01-01 1981-01-07  76.62
2           1981-01-08 1981-01-09  25.37