我想这就是你想要的:
import pandas as pd
import datetime
# define a function to get the week number according to January
get_week_number = lambda y, m, d : int(datetime.date(y, m, d).strftime('%U'))
# get the week number for October 1st; the offset
offset = get_week_number(2021, 10, 1)
def compute_week_number(year, month, day):
"""
Function that computes the week number with an offset
October 1st becomes week number 1
"""
return get_week_number(year, month, day) - offset + 1
df = pd.DataFrame({'year':[2021, 2021, 2021],
'month':[10, 10, 10],
'day':[1, 6, 29]})
df['week_number'] = df.apply(lambda x: compute_week_number(x['year'],
x['month'],
x['day']),
axis=1)
apply 与 axis=1 的使用允许为数据帧的每一行调用一个函数,以返回我们要为此行计算的新列的值。
我使用%(模数)根据您的要求计算新的周数。
第 39 周变为第 1 周,第 40 周变为第 2 周,依此类推。
这给出了:
| year |
month |
day |
week_number |
| 2021 |
10 |
1 |
1 |
| 2021 |
10 |
6 |
2 |
| 2021 |
10 |
29 |
5 |