gpt4 book ai didi

python - 从日期获取月份的第几周列

转载 作者:行者123 更新时间:2023-12-05 03:17:40 24 4
gpt4 key购买 nike

我想从日期中提取月份中的星期列。

虚拟数据:

data = pd.DataFrame(pd.date_range(' 1/ 1/ 2000', periods = 100, freq ='D'))

我试过的代码:

def add_week_of_month(df):
df['monthweek'] = pd.to_numeric(df.index.day/7)
df['monthweek'] = df['monthweek'].apply(lambda x: math.ceil(x))
return df

但是这段代码确实计算了一个月内的 7 天。一个月的前 7 天该列为 1,从第 8 天到第 14 天为 2,依此类推

但我希望每个月有日历周,所以在每个月的第一天,该特征将为 1,从之后的第一个星期一开始,它将为 2,依此类推。

谁能帮我解决这个问题?

最佳答案

您可以转换为周周期并减去该月的第一周 + 1(如果是星期一)。

如果您希望周从周日开始,请使用“W-SAT”作为句点和start.dt.dayofweek.eq(6)

# get first day of month
start = data[0]+pd.offsets.MonthBegin()+pd.offsets.MonthBegin(-1)
# or
# start = data[0].dt.to_period('M').dt.to_timestamp()

data['monthweek'] = ((data[0].dt.to_period('W')-start.dt.to_period('W'))
.apply(lambda x: x.n)
.add(start.dt.dayofweek.eq(0))
)

注意。在您的输入中,0 列是日期。

输出:

            0  monthweek
0 2000-01-01 0
1 2000-01-02 0
2 2000-01-03 1 # Monday
3 2000-01-04 1
4 2000-01-05 1
5 2000-01-06 1
6 2000-01-07 1
7 2000-01-08 1
8 2000-01-09 1
9 2000-01-10 2 # Monday
10 2000-01-11 2
.. ... ...
95 2000-04-05 1
96 2000-04-06 1
97 2000-04-07 1
98 2000-04-08 1
99 2000-04-09 1

[100 rows x 2 columns]

2001 年的示例(从星期一开始):

            0  monthweek
0 2001-01-01 1 # Monday
1 2001-01-02 1
2 2001-01-03 1
3 2001-01-04 1
4 2001-01-05 1
5 2001-01-06 1
6 2001-01-07 1
7 2001-01-08 2 # Monday
8 2001-01-09 2
9 2001-01-10 2
10 2001-01-11 2
11 2001-01-12 2
12 2001-01-13 2
13 2001-01-14 2
14 2001-01-15 3

关于python - 从日期获取月份的第几周列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74026920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com