pandas.tseries.offsets.CustomBusinessHour#

class pandas.tseries.offsets.CustomBusinessHour#

DateOffset subclass representing possibly n custom business days.

In CustomBusinessHour we can use custom weekmask, holidays, and calendar.

Parameters
nint, default 1

The number of hours represented.

normalizebool, default False

Normalize start/end dates to midnight before generating date range.

weekmaskstr, Default ‘Mon Tue Wed Thu Fri’

Weekmask of valid business days, passed to numpy.busdaycalendar.

holidayslist

List/array of dates to exclude from the set of valid business days, passed to numpy.busdaycalendar.

calendarnp.busdaycalendar

Calendar to integrate.

startstr, time, or list of str/time, default “09:00”

Start time of your custom business hour in 24h format.

endstr, time, or list of str/time, default: “17:00”

End time of your custom business hour in 24h format.

Examples

In the example below the default parameters give the next business hour.

>>> ts = pd.Timestamp(2022, 8, 5, 16)
>>> ts + pd.offsets.CustomBusinessHour()
Timestamp('2022-08-08 09:00:00')

We can also change the start and the end of business hours.

>>> ts = pd.Timestamp(2022, 8, 5, 16)
>>> ts + pd.offsets.CustomBusinessHour(start="11:00")
Timestamp('2022-08-08 11:00:00')
>>> from datetime import time as dt_time
>>> ts = pd.Timestamp(2022, 8, 5, 16)
>>> ts + pd.offsets.CustomBusinessHour(end=dt_time(19, 0))
Timestamp('2022-08-05 17:00:00')
>>> ts = pd.Timestamp(2022, 8, 5, 22)
>>> ts + pd.offsets.CustomBusinessHour(end=dt_time(19, 0))
Timestamp('2022-08-08 10:00:00')

You can divide your business day hours into several parts.

>>> import datetime as dt
>>> freq = pd.offsets.CustomBusinessHour(start=["06:00", "10:00", "15:00"],
...                                      end=["08:00", "12:00", "17:00"])
>>> pd.date_range(dt.datetime(2022, 12, 9), dt.datetime(2022, 12, 13), freq=freq)
DatetimeIndex(['2022-12-09 06:00:00', '2022-12-09 07:00:00',
               '2022-12-09 10:00:00', '2022-12-09 11:00:00',
               '2022-12-09 15:00:00', '2022-12-09 16:00:00',
               '2022-12-12 06:00:00', '2022-12-12 07:00:00',
               '2022-12-12 10:00:00', '2022-12-12 11:00:00',
               '2022-12-12 15:00:00', '2022-12-12 16:00:00'],
               dtype='datetime64[ns]', freq='CBH')

Business days can be specified by weekmask parameter. To convert the returned datetime object to its string representation the function strftime() is used in the next example.

>>> import datetime as dt
>>> freq = pd.offsets.CustomBusinessHour(weekmask="Mon Wed Fri",
...                                      start="10:00", end="13:00")
>>> pd.date_range(dt.datetime(2022, 12, 10), dt.datetime(2022, 12, 18),
...               freq=freq).strftime('%a %d %b %Y %H:%M')
Index(['Mon 12 Dec 2022 10:00', 'Mon 12 Dec 2022 11:00',
       'Mon 12 Dec 2022 12:00', 'Wed 14 Dec 2022 10:00',
       'Wed 14 Dec 2022 11:00', 'Wed 14 Dec 2022 12:00',
       'Fri 16 Dec 2022 10:00', 'Fri 16 Dec 2022 11:00',
       'Fri 16 Dec 2022 12:00'],
       dtype='object')

Using NumPy business day calendar you can define custom holidays.

>>> import datetime as dt
>>> bdc = np.busdaycalendar(holidays=['2022-12-12', '2022-12-14'])
>>> freq = pd.offsets.CustomBusinessHour(calendar=bdc, start="10:00", end="13:00")
>>> pd.date_range(dt.datetime(2022, 12, 10), dt.datetime(2022, 12, 18), freq=freq)
DatetimeIndex(['2022-12-13 10:00:00', '2022-12-13 11:00:00',
               '2022-12-13 12:00:00', '2022-12-15 10:00:00',
               '2022-12-15 11:00:00', '2022-12-15 12:00:00',
               '2022-12-16 10:00:00', '2022-12-16 11:00:00',
               '2022-12-16 12:00:00'],
               dtype='datetime64[ns]', freq='CBH')

Attributes

base

Returns a copy of the calling offset object with n=1 and all other attributes equal.

freqstr

Return a string representing the frequency.

kwds

Return a dict of extra parameters for the offset.

name

Return a string representing the base frequency.

next_bday

Used for moving to next business day.

offset

Alias for self._offset.

calendar

end

holidays

n

nanos

normalize

rule_code

start

weekmask

Methods

copy

Return a copy of the frequency.

is_anchored

Return boolean whether the frequency is a unit frequency (n=1).

is_month_end

Return boolean whether a timestamp occurs on the month end.

is_month_start

Return boolean whether a timestamp occurs on the month start.

is_on_offset

Return boolean whether a timestamp intersects with this frequency.

is_quarter_end

Return boolean whether a timestamp occurs on the quarter end.

is_quarter_start

Return boolean whether a timestamp occurs on the quarter start.

is_year_end

Return boolean whether a timestamp occurs on the year end.

is_year_start

Return boolean whether a timestamp occurs on the year start.

rollback(other)

Roll provided date backward to next offset only if not on offset.

rollforward(other)

Roll provided date forward to next offset only if not on offset.