Skip to main content
`Ctrl`+`K`

# 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:
    n int, default 1

      The number of hours represented.

    normalize bool, default False

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

    weekmask str, Default ‘Mon Tue Wed Thu Fri’

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

    holidays list

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

    calendar np.busdaycalendar

      Calendar to integrate.

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

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

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

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

    offset timedelta, default timedelta(0)

      Time offset to apply.

  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.
  `calendar` |
  `end` | Return the end time(s) of the business hour.
  `freqstr` | Return a string representing the frequency.
  `holidays` | Return the holidays used for custom business day calculations.
  `kwds` | Return a dict of extra parameters for the offset.
  `n` | Return the count of the number of periods.
  `name` | Return a string representing the base frequency.
  `nanos` | Returns an integer of the total number of nanoseconds for fixed frequencies.
  `next_bday` | Used for moving to next business day.
  `normalize` | Return boolean whether the frequency can align with midnight.
  `offset` | Alias for self._offset.
  `rule_code` | Return a string representing the base frequency.
  `start` | Return the start time(s) of the business hour.
  `weekmask` |

  Methods

  `copy`() | Return a copy of the frequency.
  `is_month_end`(ts) | Return boolean whether a timestamp occurs on the month end.
  `is_month_start`(ts) | Return boolean whether a timestamp occurs on the month start.
  `is_on_offset`(dt) | Return boolean whether a timestamp intersects with this frequency.
  `is_quarter_end`(ts) | Return boolean whether a timestamp occurs on the quarter end.
  `is_quarter_start`(ts) | Return boolean whether a timestamp occurs on the quarter start.
  `is_year_end`(ts) | Return boolean whether a timestamp occurs on the year end.
  `is_year_start`(ts) | 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.