我定义了一个Pandas CDay()
对象来存储假期。如何使用它来查找两个日期之间的工作日数?
我知道np.busday_count
,但是我的日历恰好是熊猫CDay
。
最佳答案
您可以简单地将周掩码和假期从CDay
日历直接传递到np.busday_count
。
np.busday_count(start_date, end_date,
weekmask=bday_custom.weekmask, holidays=bday_custom.holidays)
另外,您也可以使用
pd.date_range
,并将您的自定义CDay
日历作为freq
传递(但肯定要慢一些)。pd.date_range(datetime(2017, 3, 5), datetime(2017, 3, 12), freq=bday_cust).size
不幸的是,创建中间日期范围仅使用其大小会产生副作用。
例
让我们设置一个毫无意义的自定义工作日日历。
from pandas.tseries.offsets import CustomBusinessDay
weekmask = 'Mon Wed Fri Sat'
holidays = [datetime(2017, 3, 6), datetime(2017, 3, 11)]
bday_cust = CustomBusinessDay(holidays=holidays, weekmask=weekmask)
现在,我们将星期一和星期六设置为3月5日至11日这一周的工作日(和节假日)。现在查看该特定日期范围,我们可以计算剩余的工作日(2)
>>> np.busday_count(datetime(2017, 3, 5), datetime(2017, 3, 12),
weekmask=bday_custom.weekmask,
holidays=bday_custom.holidays)
2
>>> pd.date_range(datetime(2017, 3, 5), datetime(2017, 3, 12), freq=bday_cust).size
2
关于示例的粗略基准
%timeit np.busday_count(datetime(2017, 3, 5), datetime(2017, 3, 12),
weekmask=bday_custom.weekmask,
holidays=bday_custom.holidays)
100000 loops, best of 3: 17.2 us per loop
% timeit pd.date_range(datetime(2017, 3, 5), datetime(2017, 3, 12), freq=bday_cust).size
1000 loops, best of 3: 573 us per loop
关于python - 如何使用Pandas CDay查找两个日期之间的工作日?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42789645/