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

时间:2017-05-10 17:29:55

标签: python pandas datetime business-logic

我试图通过添加新的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)

我遇到的错误。

  

'系列'对象没有属性'天'

我想做什么。

# 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计算只是虚拟数字。

1 个答案:

答案 0 :(得分:2)

如果您传递正确的类型,则可以使用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