将 pandas 列转换为用户定义的周数

use*_*538 1 python pandas

下面是 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
Run Code Online (Sandbox Code Playgroud)

鉴于利息期介于2017-07-13和 之间2017-11-21,则相当于 20 周。我需要将每个值映射invoiceDate到相应的周数。例如,2017-07-18映射到第 1 周(第一周分别在 和 开始和结束2017-07-132017-07-192017-08-20第 6 周(第六周分别在 和 开始2017-08-17和结束2017-08-23)。是invoiceDate对象类型。

Sco*_*ton 5

与 freq 'W-Wed' 一起使用to_period改变一周的开始。

s = df['invoiceDate'].dt.to_period('W-Wed').dt.week
df['Week_Num'] = (s - s.min() + 1)
Run Code Online (Sandbox Code Playgroud)

df['Week_Num'] = (df['invoiceDate'].dt.to_period('W-Wed').dt.week - df['invoiceDate'].dt.to_period('W-Wed').dt.周.分钟() + 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
Run Code Online (Sandbox Code Playgroud)