为 python 中的两个日期列计算工作日,包括自定义假期

calculate business days including custom holidays for two dates columns in python

我试图通过添加新的 date_difference 列来获取两个日期列之间的工作日。

我尝试了什么?

bd = workday(ll.date_done,ll.order_date, cal)
bd = networkdays(ll.date_done,ll.order_date, cal)
km = np.busday_count(dd.date(), od.date(), holidays = cal)

我收到一个错误。

'Series' object has no attribute 'days'

我想做什么。

# Table Name: ll
order_date  date_done
2017-04-09  2017-04-16
2017-04-09  2017-04-18
2017-04-10  2017-04-20

我期待的是:

order_date  date_done      Date_Difference
2017-04-09  2017-04-16        4
2017-04-09  2017-04-18        7
2017-04-10  2017-04-20        6

我在做什么计算?

我有假期列表,不包括我试图从两个日期中获取工作日差异。以上 date_difference 计算只是虚拟数字。

如果您将正确的类型传递给它,则可以使用 numpy.bus_daycount()

代码:

df['date_diff'] = np.busday_count(
    df.order_date.values.astype('datetime64[D]'),
    df.date_done.values.astype('datetime64[D]'))

测试代码:

import pandas as pd
import numpy as np

from io import StringIO
df = pd.read_fwf(StringIO(u"""
    order_date  date_done
    2017-04-09  2017-04-16
    2017-04-09  2017-04-18
    2017-04-10  2017-04-20"""), header=1)
df.order_date = pd.to_datetime(df.order_date, infer_datetime_format=True)
df.date_done = pd.to_datetime(df.date_done, infer_datetime_format=True)

df['date_diff'] = np.busday_count(
    df.order_date.values.astype('datetime64[D]'),
    df.date_done.values.astype('datetime64[D]'))

print(df)

结果:

  order_date  date_done  date_diff
0 2017-04-09 2017-04-16          5
1 2017-04-09 2017-04-18          6
2 2017-04-10 2017-04-20          8