下面是 python 中一个相当大的数据框的一小部分。
ID invoiceDate
1 2017-07-18
2 2017-10-17
3 2017-08-20
4 2017-09-05
5 2017-08-20
6 2017-11-08
7 2017-09-17
8 2017-11-10
9 2017-08-14
10 2017-08-24
鉴于感兴趣的时间段在2017-07-13和2017-11-21之间,相当于20周。我需要将 invoiceDate 中的每个值映射到相应的周数。例如,2017-07-18 映射到第一周(第一周开始和结束于 2017-07-13 和 2017-07-19,分别)或 2017-08-20 到第 6 周(第 6 周开始和结束于 2017-08-17 和 2017-08- 23)。 invoiceDate 是对象类型。
请您参考如下方法:
使用 to_period使用 freq 'W-Wed' 改变一周的开始。
s = df['invoiceDate'].dt.to_period('W-Wed').dt.week
df['Week_Num'] = (s - s.min() + 1)
df['Week_Num'] = (df['invoiceDate'].dt.to_period('W-Wed').dt.week - df['invoiceDate'].dt.to_period('W-Wed').dt.week.min() + 1)
输出:
productID invoiceDate Week_Num
0 1 2017-07-18 1
1 2 2017-10-17 14
2 3 2017-08-20 6
3 4 2017-09-05 8
4 5 2017-08-20 6
5 6 2017-11-08 17
6 7 2017-09-17 10
7 8 2017-11-10 18
8 9 2017-08-14 5
9 10 2017-08-24 7
