我有一个数据框,其中包含日期、一年中的日期和星期。
我需要使用一年中的第几周来创建一个值从 1 到 5 的新列。
假设我在第 35 周,第 35 周的所有列都应该有 1 个,第 36 周的所有列应该有 2 个,依此类推。一旦到达第 40 周和第 5 周,新列中的数字需要从第 41 周的 1 开始,并以这种模式继续,无论数据范围有多长
def date_table(start='2019-08-26', end='2019-10-27'):
df = pd.DataFrame({"Date": pd.date_range(start, end)})
df["Day"] = df.Date.dt.weekday_name
df["Week"] = df.Date.dt.weekofyear
return df
使用模数和周数计算索引:
import pandas as pd
start='2019-08-26'
end='2019-10-27'
df = pd.DataFrame({"Date": pd.date_range(start, end)})
df["Day"] = df.Date.dt.weekday_name
df["Week"] = df.Date.dt.weekofyear
df["idx"] = df["Week"] % 5 +1 # n % 5 = 0..4 plus 1 == 1..5
print(df)
输出:
0 2019-08-26 Monday 35 1
[...]
6 2019-09-01 Sunday 35 1
7 2019-09-02 Monday 36 2
[...]
13 2019-09-08 Sunday 36 2
14 2019-09-09 Monday 37 3
[...]
20 2019-09-15 Sunday 37 3
21 2019-09-16 Monday 38 4
[...]
27 2019-09-22 Sunday 38 4
28 2019-09-23 Monday 39 5
[...]
34 2019-09-29 Sunday 39 5
35 2019-09-30 Monday 40 1
[...]
[63 rows x 4 columns]
<小时/>
如果您希望它从不被 5 整除的周数开始 - 您也可以通过减去所有周数的第一周的模 5 值来实现:
# startweeknumber:
startweekmod = df["Week"][0] % 5
# offset by inital weeks mod
df["idx"] = (df["Week"] - startweekmod) % 5 + 1
我是一名优秀的程序员,十分优秀!