gpt4 book ai didi

python - 使用自定义开始日在 Pandas 中创建周变量

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:45 25 4
gpt4 key购买 nike

我将以下 pandas 数据帧索引到 Time_Stamp:

df = DataFrame(index = pd.date_range('4/1/2017', freq='3D', periods=10))
df['weekday'] = df.index.weekday_name

数据看起来像这样:

              weekday
2017-04-01 Saturday
2017-04-04 Tuesday
2017-04-07 Friday
2017-04-10 Monday
2017-04-13 Thursday
2017-04-16 Sunday
2017-04-19 Wednesday
2017-04-22 Saturday
2017-04-25 Tuesday
2017-04-28 Friday

我想创建一个新列“周”,它会给出一年中的第几周,但有一个工作日。

我知道我可以做到这一点:

df['week_sun'] = df.index.week

除非我希望一周的第一天不是星期天。对于这个问题,假设我需要它是星期三,这样生成的数据框就会像这样:

              weekday  week_sun  week_wed
2017-04-01 Saturday 13 13
2017-04-04 Tuesday 14 13
2017-04-07 Friday 14 14
2017-04-10 Monday 15 14
2017-04-13 Thursday 15 15
2017-04-16 Sunday 15 15
2017-04-19 Wednesday 16 16
2017-04-22 Saturday 16 16
2017-04-25 Tuesday 17 16
2017-04-28 Friday 17 17

我不知道如何实现这一点。谢谢!

最佳答案

根据您的要求,您只需将周数减去 1,以防星期几“早于”引用日(在您的示例中为星期三)。

In [162]: df
Out[162]:
weekday week_sun
2017-04-01 Saturday 13
2017-04-04 Tuesday 14
2017-04-07 Friday 14
2017-04-10 Monday 15
2017-04-13 Thursday 15
2017-04-16 Sunday 15
2017-04-19 Wednesday 16
2017-04-22 Saturday 16
2017-04-25 Tuesday 17
2017-04-28 Friday 17

In [163]: df['week_wed'] = df['week_sun']

现在让我们在需要的地方移动值,这意味着工作日在星期三之前,因此 df.index.dayofweek < 2 .

In [164]: df.loc[df.index.dayofweek < 2, 'week_wed'] = (df[df.index.dayofweek < 2]['week_sun'] - 2) % 52 + 1

In [165]: df
Out[165]:
weekday week_sun week_wed
2017-04-01 Saturday 13 13
2017-04-04 Tuesday 14 13
2017-04-07 Friday 14 14
2017-04-10 Monday 15 14
2017-04-13 Thursday 15 15
2017-04-16 Sunday 15 15
2017-04-19 Wednesday 16 16
2017-04-22 Saturday 16 16
2017-04-25 Tuesday 17 16
2017-04-28 Friday 17 17

我并没有完全减去 1,而是使用了模运算 ((X-2) %52 +1)),因此如果需要,我可以将上一年的第 1 周转换为第 52 周:

              weekday  week_sun  week_wed
2017-12-27 Wednesday 52 52
2017-12-30 Saturday 52 52
2018-01-02 Tuesday 1 52
2018-01-05 Friday 1 1

关于python - 使用自定义开始日在 Pandas 中创建周变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46044676/

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