pandas 如何在元旦重置星期计数器
How to reset week counter on the new-year day in pandas
如您所知,pandas dt 对象的周属性是 ISO 周。相反,我想为我的数据中的行分配一个周数,该周数在 1 月的第一天为 1,在第一个星期一(不是 1 月 1 日)变为 2。同样,我不想在 12 月有第 1 周。它应该增加周数而不是重置它。这是正常行为:
import pandas as pd
df = pd.DataFrame({"Date":pd.date_range(start = '12/27/2019', end = '1/2/2020')})
df["Week_day"] = df.Date.dt.weekday
df["Week"] = df.Date.dt.week
df
Date Week Week_day
0 2019-12-27 52 4
1 2019-12-28 52 5
2 2019-12-29 52 6
3 2019-12-30 1 0
4 2019-12-31 1 1
5 2020-01-01 1 2
6 2020-01-02 1 3
这就是我想要的:
df2 = pd.DataFrame({"Date":pd.date_range(start = '12/27/2019', end = '1/2/2020'),
"Week":[52, 52, 52, 53, 53, 1, 1]})
df2["Week_day"] = df2.Date.dt.weekday
df2
Date Week Week_day
0 2019-12-27 52 4
1 2019-12-28 52 5
2 2019-12-29 52 6
3 2019-12-30 53 0
4 2019-12-31 53 1
5 2020-01-01 1 2
6 2020-01-02 1 3
我可以使用 pandas 方法来实现还是应该编写自己的函数?
我们应该做
df.Date.dt.strftime('%W').astype(int)+1
Out[108]:
0 52
1 52
2 52
3 53
4 53
5 1
6 1
Name: Date, dtype: int32
如您所知,pandas dt 对象的周属性是 ISO 周。相反,我想为我的数据中的行分配一个周数,该周数在 1 月的第一天为 1,在第一个星期一(不是 1 月 1 日)变为 2。同样,我不想在 12 月有第 1 周。它应该增加周数而不是重置它。这是正常行为:
import pandas as pd
df = pd.DataFrame({"Date":pd.date_range(start = '12/27/2019', end = '1/2/2020')})
df["Week_day"] = df.Date.dt.weekday
df["Week"] = df.Date.dt.week
df
Date Week Week_day
0 2019-12-27 52 4
1 2019-12-28 52 5
2 2019-12-29 52 6
3 2019-12-30 1 0
4 2019-12-31 1 1
5 2020-01-01 1 2
6 2020-01-02 1 3
这就是我想要的:
df2 = pd.DataFrame({"Date":pd.date_range(start = '12/27/2019', end = '1/2/2020'),
"Week":[52, 52, 52, 53, 53, 1, 1]})
df2["Week_day"] = df2.Date.dt.weekday
df2
Date Week Week_day
0 2019-12-27 52 4
1 2019-12-28 52 5
2 2019-12-29 52 6
3 2019-12-30 53 0
4 2019-12-31 53 1
5 2020-01-01 1 2
6 2020-01-02 1 3
我可以使用 pandas 方法来实现还是应该编写自己的函数?
我们应该做
df.Date.dt.strftime('%W').astype(int)+1
Out[108]:
0 52
1 52
2 52
3 53
4 53
5 1
6 1
Name: Date, dtype: int32