我定义了一个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/

10-08 22:39