与BusinessDay的pandas.Timedelta

时间:2017-12-12 13:10:03

标签: python pandas

我需要将pd.Timedelta偏移量应用于索引,但我想仅考虑工作日。不幸的是,这是不可能的,因为pd.Timedelta目前不支持工作日。

输入:

>>> d = pd.date_range(start='2015-1-10', end='2015-1-22', freq='B')
DatetimeIndex(['2015-01-12', '2015-01-13', '2015-01-14', '2015-01-15',
               '2015-01-16', '2015-01-19', '2015-01-20', '2015-01-21',
               '2015-01-22'],
              dtype='datetime64[ns]', freq='B')

>>> td = pd.Timedelta('2D3h')
Timedelta('2 days 03:00:00')

预期产出:

DatetimeIndex(['2015-01-14 03:00:00', '2015-01-15 03:00:00',
               '2015-01-16 03:00:00', '2015-01-19 03:00:00',
               '2015-01-20 03:00:00', '2015-01-21 03:00:00',
               '2015-01-22 03:00:00', '2015-01-23 03:00:00',
               '2015-01-26 03:00:00'],
              dtype='datetime64[ns]', freq='B')

1 个答案:

答案 0 :(得分:0)

这是一个可能的解决方案:

def add_bday_timedelta(input, timedelta):
    """
    Add timedelta to input taking into consideration business days
    """
    days = timedelta.components.days
    offset = timedelta - '%dD' % days
    return input + BusinessDay(days) + offset

>>> add_bday_timedelta(d, td)
DatetimeIndex(['2015-01-14 03:00:00', '2015-01-15 03:00:00',
               '2015-01-16 03:00:00', '2015-01-19 03:00:00',
               '2015-01-20 03:00:00', '2015-01-21 03:00:00',
               '2015-01-22 03:00:00', '2015-01-23 03:00:00',
               '2015-01-26 03:00:00'],
              dtype='datetime64[ns]', freq='B')