Функция busday_offset
Функция busday_offset из модуля numpy позволяет
вычислить дату, которая наступает через заданное количество
рабочих дней (или до) от указанной начальной даты.
Она учитывает стандартные выходные дни (суббота и воскресенье)
и может принимать пользовательский календарь с праздничными днями.
Первый параметр dates - начальная дата или массив дат.
Второй параметр offsets - количество рабочих дней
для смещения (положительное - в будущее, отрицательное - в прошлое).
Дополнительные параметры: roll (поведение для нерабочих дней),
weekmask (маска рабочих дней) и
holidays (праздничные дни).
Синтаксис
np.busday_offset(dates, offsets, roll='raise', weekmask='1111100', holidays=None, busdaycal=None, out=None)
Пример
Давайте вычислим дату через 5 рабочих дней от текущей:
import numpy as np
arr = np.busday_offset('2026-01-01', 5)
print(arr)
Результат выполнения кода:
'2026-01-08'
Пример
Попробуем сместиться на отрицательное количество дней (в прошлое):
import numpy as np
arr = np.busday_offset('2026-01-12', -3)
print(arr)
Результат выполнения кода:
'2026-01-07'
Пример
Используем параметр roll со значением 'forward',
чтобы автоматически перенести стартовую дату на ближайший рабочий день
в будущем, если она выпала на выходной:
import numpy as np
# 2026-01-03 - суббота
arr = np.busday_offset('2026-01-03', 1, roll='forward')
print(arr)
Результат выполнения кода:
'2026-01-05'
Пример
Применим функцию к массиву дат с разными смещениями:
import numpy as np
dates = np.array(['2026-01-01', '2026-01-02', '2026-01-03'], dtype='datetime64')
offsets = np.array([1, 2, 3])
arr = np.busday_offset(dates, offsets)
print(arr)
Результат выполнения кода:
['2026-01-02' '2026-01-05' '2026-01-06']
Пример
Укажем праздничный день (1 января), чтобы он не считался рабочим:
import numpy as np
holidays = ['2026-01-01']
arr = np.busday_offset('2025-12-31', 1, holidays=holidays)
print(arr)
Результат выполнения кода:
'2026-01-02'
Пример
Изменим маску рабочих дней на шестидневную рабочую неделю (выходной только воскресенье):
import numpy as np
# маска: понедельник-суббота работаем (1), воскресенье отдыхаем (0)
weekmask = '1111110'
arr = np.busday_offset('2026-01-04', 1, weekmask=weekmask)
print(arr)
Результат выполнения кода:
'2026-01-05'
Смотрите также
-
функцию
is_busday,
которая проверяет, является ли дата рабочим днём -
функцию
busday_count,
которая считает количество рабочих дней между двумя датами -
класс
busdaycalendar,
который позволяет создать объект календаря с пользовательскими настройками -
функцию
datetime_as_string,
которая преобразует дату и время в строку в заданном формате