Python从pandate列获取一周的前一天(在我的示例中是星期四)
我有一个熊猫日期栏,我想返回上一个星期四的日期(可以是一周中的任何一天)。我使用pd.offsets.Week,但当年份发生变化且一周重新开始时,我没有得到预期的结果。这是我的数据框“d”:Python从pandate列获取一周的前一天(在我的示例中是星期四),python,pandas,Python,Pandas,我有一个熊猫日期栏,我想返回上一个星期四的日期(可以是一周中的任何一天)。我使用pd.offsets.Week,但当年份发生变化且一周重新开始时,我没有得到预期的结果。这是我的数据框“d”: 原始日期星期四开始 0 2019-01-03 2018-12-27 2018-12-27 1 2019-01-03 2018-12-27 2018-12-27 2 2019-01-03 2018-12-27 2018-12-27 3 2019-01-02 2018-12-27 2018-12-27
原始日期星期四开始
0 2019-01-03 2018-12-27 2018-12-27
1 2019-01-03 2018-12-27 2018-12-27
2 2019-01-03 2018-12-27 2018-12-27
3 2019-01-02 2018-12-27 2018-12-27
4 2019-01-02 2018-12-27 2018-12-27
5 2019-01-02 2018-12-27 2018-12-27
6 2019-01-03 2019-01-03 2018-12-27
7 2019-01-03 2019-01-03 2018-12-27
8 2019-01-03 2019-01-03 2018-12-27
9 2019-01-03 2019-01-03 2018-12-27
10 2019-01-02 2018-12-27 2018-12-27
11 2019-01-02 2018-12-27 2018-12-27
12 2019-01-02 2018-12-27 2018-12-27
我预计d['week_start']=2019年1月3日返回2019年1月3日,而不是2018年12月27日。我怀疑这是因为2019年1月3日的一周是0,所以它返回该周的星期四。不管一年中发生了什么变化,我怎样才能得到上一个星期四的日期 您可以仅用于更改,而不是星期四
值:
rng = pd.date_range('2019-01-03', periods=20)
d = pd.DataFrame({'raw date': rng})
mask = d['raw date'].dt.weekday == 3
d['week_start'] = d['raw date'].where(mask, d['raw date'] - pd.offsets.Week(weekday=3))
print(d)
raw date week_start
0 2019-01-03 2019-01-03
1 2019-01-04 2019-01-03
2 2019-01-05 2019-01-03
3 2019-01-06 2019-01-03
4 2019-01-07 2019-01-03
5 2019-01-08 2019-01-03
6 2019-01-09 2019-01-03
7 2019-01-10 2019-01-10
8 2019-01-11 2019-01-10
9 2019-01-12 2019-01-10
10 2019-01-13 2019-01-10
11 2019-01-14 2019-01-10
12 2019-01-15 2019-01-10
13 2019-01-16 2019-01-10
14 2019-01-17 2019-01-17
15 2019-01-18 2019-01-17
16 2019-01-19 2019-01-17
17 2019-01-20 2019-01-17
18 2019-01-21 2019-01-17
19 2019-01-22 2019-01-17
这可以使用pd.TimeDeltaIndex完成 df[“date”].dt.dayofweek-3+7)将给出下周星期四之前的天 df[“date”].dt.dayofweek-3+7)%7将给出上周四之后的天
日期范围=pd.日期范围('2019-9-20',期间=20)
df=pd.DataFrame({'date':date\u range})
df[“周开始”]=df[“日期”]-pd.TimedeltaIndex((df[“日期”].dt.dayofweek-3+7)%7,“D”)
df
结果
date date dayofweek week_start week_start dayofweek
0 2019-09-20 4 2019-09-19 3
1 2019-09-21 5 2019-09-19 3
2 2019-09-22 6 2019-09-19 3
3 2019-09-23 0 2019-09-19 3
4 2019-09-24 1 2019-09-19 3
5 2019-09-25 2 2019-09-19 3
6 2019-09-26 3 2019-09-26 3
7 2019-09-27 4 2019-09-26 3
8 2019-09-28 5 2019-09-26 3
9 2019-09-29 6 2019-09-26 3
10 2019-09-30 0 2019-09-26 3
11 2019-10-01 1 2019-09-26 3
12 2019-10-02 2 2019-09-26 3
13 2019-10-03 3 2019-10-03 3
14 2019-10-04 4 2019-10-03 3
15 2019-10-05 5 2019-10-03 3
16 2019-10-06 6 2019-10-03 3
17 2019-10-07 0 2019-10-03 3
18 2019-10-08 1 2019-10-03 3
19 2019-10-09 2 2019-10-03 3
太好了,谢谢!我缺少dt.weekday==我想要的星期几的条件部分。谢谢你的掩码和。在哪里,它现在可以在我想要的代码库中工作。
date date dayofweek week_start week_start dayofweek
0 2019-09-20 4 2019-09-19 3
1 2019-09-21 5 2019-09-19 3
2 2019-09-22 6 2019-09-19 3
3 2019-09-23 0 2019-09-19 3
4 2019-09-24 1 2019-09-19 3
5 2019-09-25 2 2019-09-19 3
6 2019-09-26 3 2019-09-26 3
7 2019-09-27 4 2019-09-26 3
8 2019-09-28 5 2019-09-26 3
9 2019-09-29 6 2019-09-26 3
10 2019-09-30 0 2019-09-26 3
11 2019-10-01 1 2019-09-26 3
12 2019-10-02 2 2019-09-26 3
13 2019-10-03 3 2019-10-03 3
14 2019-10-04 4 2019-10-03 3
15 2019-10-05 5 2019-10-03 3
16 2019-10-06 6 2019-10-03 3
17 2019-10-07 0 2019-10-03 3
18 2019-10-08 1 2019-10-03 3
19 2019-10-09 2 2019-10-03 3