Skip to content

CustomBusinessDay slow for increments <0 and >1 #8236

Closed
@bjonen

Description

@bjonen

For rolling back or for moving forward more than one step, DateOffsets create a new instance setting n accordingly. The CustomBusinessDay constructor can be very slow, however, when a large list of holidays is passed. The holidays are processed to datetime64.

As a result speed deteriorates by two magnitudes.

import pandas as pd
import datetime as dt

pd.__version__
Out[6]:
'0.14.1'
In [7]:
cbday = pd.offsets.CustomBusinessDay()
date + cbday
%timeit date + cbday
100000 loops, best of 3: 14.6 µs per loop
In [8]:
hdays = [dt.datetime(2013,1,1) for ele in range(1000)]
cbdayh = pd.offsets.CustomBusinessDay(holidays=hdays)
date + cbdayh
%timeit date + cbdayh
%timeit date + 2*cbdayh
%timeit date - 1*cbdayh
%timeit date - 10*cbday

100000 loops, best of 3: 14.6 µs per loop
100 loops, best of 3: 3.4 ms per loop
100 loops, best of 3: 6.76 ms per loop
10000 loops, best of 3: 27.8 µs per loop

I think it makes sense to have the user call to_dt64 before initializing CustomBusinessDay and to rely on the holidays to be passed in the correct format. Any other ideas how to handle this problem? Shall I create a PR for this?

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrequencyDateOffsetsPerformanceMemory or execution speed performance

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions