Python 计算给定日期前3个工作日的假期

Python 计算给定日期前3个工作日的假期,python,Python,假设我们的日期是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):

假设我们的日期是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)

既然你整天都在忙着循环,我建议你每天都做一个简单的备份和检查,比如:

dt_tue=datetime.strtime('2019-11-19','%Y-%m-%d'))
当天=周二
前几天=0
而<2之前的天数_:
#跳过周末和假日(不计入工作日)
当当前_天.weekday()>=5或df['Date']中的当前_天时:
当前天数-=timedelta(天数=1)
#往后退一步
当前天数-=timedelta(天数=1)
+=1之前的天数
bd_3=当前_日

您可能需要稍微调整一下,因为我不能100%确定您的假日数据帧的格式。

星期二之前的3个工作日不是星期四吗?不包括星期二,现在是星期五。您是否尝试过以星期四或星期五为开始日?我相信你会发现它们分别出现在星期一或星期二,这与逻辑不符,明白了。那我得把它修好。很高兴你能帮我把假期包括在内。我想如果我把bd_3设置为
dt-timedelta(days=2)
这个问题就解决了。但是,对于周六和周日,这应该是脚本中提到的
timedelta(days=4)
。请检查日期
2019-10-14
。这是星期一,也是美国的假日。根据您的逻辑,
bd_3
datetime.datetime(2019、10、11、0、0)
,即10月11日星期五。这是不正确的。好的,我已经修复了工作日条件(它应该是
=5
,而不是
>5
),但是由于我不知道数据帧的格式,检查它的条件可能是错误的。因此,我的评论是,如果您展示数据帧的实际格式,那么您需要相应地调整它,这将有助于lot@Ixop:我已使用holiday dataframe更新了问题。我没有安装
pandas
来验证我的代码,但我已将条件更新为我认为应该有效的条件。你应该能够自己解决剩下的问题
    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