【问题标题】:performance of pandas custom business day offset熊猫自定义工作日偏移的表现
【发布时间】:2015-10-09 23:27:28
【问题描述】:

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

目前,我正在使用类似于以下代码的代码,这些代码是从 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 毫秒内运行; without_holiday 行的运行时间约为 15 微秒。

有什么方法可以让 bday_offset 函数更快?

【问题讨论】:

    标签: python pandas time-series


    【解决方案1】:

    我认为您通过 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
    

    【讨论】:

    • 谢谢。我希望能够将天数作为参数传递,但我需要 90% 的时间偏移一天,所以你的解决方案会有很大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多