【问题标题】:How to exclude business days from date calculations如何从日期计算中排除工作日
【发布时间】:2020-08-10 03:57:17
【问题描述】:

日期格式如下:

YYYY-MM-DD HH:MM:SS

使用以下笔记本和计算:

import pandas as pd
import numpy as np 
import datetime as dt

F52_metrics['Dock to UPS SAP Receipt'] = (F52_metrics['UPS SAP Receipt Date'].dt.date - F52_metrics['Dock Date'].dt.date).astype(str).map(lambda x: x.rstrip('00:00:00.000000000')).str.replace("NaT", "").str.replace("+","").str.replace("days","")

需要重复上述计算以排除工作日。我尝试用 numpy.busday_count 完全替换计算,但一直遇到语法错误。

【问题讨论】:

  • 您如何定义工作日?在一些我工作过的公司里,只有元旦被认为是非工作日。周六在某些地区是工作日,周五在其他地区是假期
  • M-F 是工作日

标签: pandas numpy date datetime calculation


【解决方案1】:

你可以使用 numpy 日历。

def calendar(): 
    #set work week mask and optional holidays array
    return np.busdaycalendar(weekmask='1111100', holidays=['2020-01-01','2020-01-20','2020-02-17','2020-05-25','2020-07-03','2020-09-07','2020-10-12','2020-11-11','2020-11-26','2020-12-25'])

def countWeekDays(fromDate='2020-03-03', toDate='2020-06-03'):  
    d = np.arange(fromDate, toDate, dtype=np.datetime64)
    
    weekdays = d[np.is_busday(d, busdaycal=calendar())] 
    
    workDays = [(m, np.array([i for i in weekdays if i.item().month==m]).size) for m in range(1,13)]
    
    return workDays #weekdays, months #

>>> countWeekDays()
[(1, 0), (2, 0), (3, 21), (4, 22), (5, 20), (6, 2), (7, 0), (8, 0), (9, 0), (10, 0), (11, 0), (12, 0)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多