大熊猫定制营业日抵消的表现

时间:2015-07-20 18:02:06

标签: python pandas time-series

对于大量日期,我需要计算下一个工作日,我在那里计算假期。

目前,我正在使用类似下面的代码,我已经从IPython笔记本中粘贴了这些代码:

import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar

cal = USFederalHolidayCalendar()
bday_offset = lambda n: pd.datetools.offsets.CustomBusinessDay(n, calendar=cal)

mydate = pd.to_datetime("12/24/2014")
%timeit with_holiday = mydate + bday_offset(1)
%timeit without_holiday = mydate + pd.datetools.offsets.BDay(1)

在我的计算机上,with_holiday行在~12毫秒内运行;而且no_holiday线在〜15微秒内运行。

有没有办法让 bday_offset 功能更快?

1 个答案:

答案 0 :(得分:5)

我认为你通过lambda实现它的方式正在减慢它的速度。考虑这种方法(或多或少直接来自documentaion

from pandas.tseries.offsets import CustomBusinessDay
bday_us = CustomBusinessDay(calendar=USFederalHolidayCalendar())
mydate + bday_us

Out[13]: Timestamp('2014-12-26 00:00:00')

第一部分很慢,但你只需要做一次。第二部分非常快。

%timeit bday_us = CustomBusinessDay(calendar=USFederalHolidayCalendar())
10 loops, best of 3: 66.5 ms per loop

%timeit mydate + bday_us
10000 loops, best of 3: 44 µs per loop

为了得到苹果到苹果,这是我机器上的其他时间:

%timeit with_holiday = mydate + bday_offset(1)
10 loops, best of 3: 23.1 ms per loop

%timeit without_holiday = mydate + pd.datetools.offsets.BDay(1)
10000 loops, best of 3: 36.6 µs per loop