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

2024-04-26 06:44:47 发布

您现在位置: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):
  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日,也就是星期五,这是正确的

我想在上面的代码中处理一个假日(如dataframe中提供的)。例如,如果dt_in属于任何假日(包括bd_3dt_tue),那么bd\u3应该是11月14日。除了假日在周六或周日之外,bd\u3应该是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

Tags: 代码indatetimedtdaysbdtimedeltamonday
1条回答
网友
1楼 · 发布于 2024-04-26 06:44:47

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

dt_tue = datetime.strptime('2019-11-19','%Y-%m-%d')
current_day = dt_tue
days_before = 0
while days_before < 2:
    # Skip weekends and holiday (without counting as a business day)
    while current_day.weekday() >= 5 or current_day in df['Date']:
        current_day -= timedelta(days=1)
    # Step back a business day
    current_day -= timedelta(days=1)
    days_before += 1
bd_3 = current_day

你可能需要调整一下,因为我不是100%确定你的假日数据帧是如何格式化的

相关问题 更多 >