【发布时间】:2019-11-14 05:55:08
【问题描述】:
假设我们有一个日期为2019-11-19,即星期二。现在我想从星期二开始返回 3 个工作日,即我想得到2019-11-15,因为 16 日和 17 日分别是星期六和星期日。为此,我有以下代码:
dt_tue = datetime.strptime('2019-11-19','%Y-%m-%d')
bd-3 = dt_tue - timedelta(days=3) #<--- 3 business days prior
for i in range(bd_3.day,dt_tue.day+1):
dt_in = datetime(dt_tue.year,dt_tue.month,i)
if dt_in.weekday() > 5:
bd_3 = dt_tue - timedelta(4)
上面的代码生成 bd_3 为 2019 年 11 月 15 日,即星期五,这是正确的。
我想在上面的代码中处理假期(数据框中提供)。例如,如果dt_in 是在任何假期(包括bd_3 和dt_tue),那么bd_3 应该是11 月14 日。除了Holiday 是在周六或周日,那么bd_3 应该只是11 月15 日。
任何机构都可以投一些光吗?假设假期数据框如下所示:
Date Holiday_name Day
January 1, 2019 New Year's Day Tuesday
January 21, 2019 Martin Luther King Day Monday
February 18, 2019 Presidents' Day* Monday
May 27, 2019 Memorial Day Monday
【问题讨论】:
-
星期二不是星期四前 3 个工作日吗?
-
不包括星期二是星期五。
-
您是否尝试过以星期四或星期五作为开始日?我相信你会发现那些分别出现在星期一或星期二,这不符合那个逻辑
-
好的,明白了。然后我需要解决这个问题。很高兴你能帮我把假期包括在内。
-
我想如果我将 bd_3 设置为
dt - timedelta(days=2)这个问题会得到解决。但是,对于周六和周日,这应该是脚本中提到的timedelta(days=4)。
标签: python