Python 为数据帧中的每4行分配一个编号id

Python 为数据帧中的每4行分配一个编号id,python,pandas,Python,Pandas,我有这样一个熊猫数据框: pd.DataFrame({'week': ['2019-w01', '2019-w02','2019-w03','2019-w04', '2019-w05','2019-w06','2019-w07','2019-w08', '2019-w9','2019-w10','2019-w11','2019-w12'], 'value': [11,

我有这样一个熊猫数据框:

pd.DataFrame({'week': ['2019-w01', '2019-w02','2019-w03','2019-w04',
                         '2019-w05','2019-w06','2019-w07','2019-w08',
                         '2019-w9','2019-w10','2019-w11','2019-w12'],
               'value': [11,22,33,34,57,88,2,9,10,1,76,14],
               'period': [1,1,1,1,2,2,2,2,3,3,3,3]})


    week    value
0   2019-w1 11
1   2019-w2 22
2   2019-w3 33
3   2019-w4 34
4   2019-w5 57
5   2019-w6 88
6   2019-w7 2
7   2019-w8 9
8   2019-w9 10
9   2019-w10    1
10  2019-w11    76
11  2019-w12    14
我需要的是如下所示。我想每隔4周分配一个时段ID

    week      value period
0   2019-w01    11  1
1   2019-w02    22  1
2   2019-w03    33  1
3   2019-w04    34  1
4   2019-w05    57  2
5   2019-w06    88  2
6   2019-w07    2   2
7   2019-w08    9   2
8   2019-w9    10   3
9   2019-w10    1   3
10  2019-w11    76  3
11  2019-w12    14  3
实现这一目标的最佳方式是什么?谢谢

试试:

df['period']=(pd.to_numeric(df['week'].str.split('-').str[-1]
                 .str.replace('w',''))//4).shift(fill_value=0).add(1)
print(df)


数据帧可以有超过12行,还是只针对这个特定的数据帧?如果您可以确保没有丢失的周数,那么就只需
df.index//4
。否则,它会变得更复杂,而且很可能使用DateTimes是最简单的。我喜欢您的解决方案。如果你把它作为答案,我会接受的。
        week  value  period
0   2019-w01     11       1
1   2019-w02     22       1
2   2019-w03     33       1
3   2019-w04     34       1
4   2019-w05     57       2
5   2019-w06     88       2
6   2019-w07      2       2
7   2019-w08      9       2
8    2019-w9     10       3
9   2019-w10      1       3
10  2019-w11     76       3
11  2019-w12     14       3