Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python从pandate列获取一周的前一天(在我的示例中是星期四)_Python_Pandas - Fatal编程技术网

Python从pandate列获取一周的前一天(在我的示例中是星期四)

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

我有一个熊猫日期栏,我想返回上一个星期四的日期(可以是一周中的任何一天)。我使用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
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