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