Understanding numpy.busday_offset() function (4 examples)

Updated: February 28, 2024 By: Guest Contributor Post a comment

Introduction

The numpy.busday_offset() function from the NumPy library is a powerful tool for working with dates, especially when dealing with business days (weekdays minus any holidays specified). This function is highly versatile, enabling users to calculate a date offset from a given date, using business days as the counting measure. This tutorial aims to demystify the numpy.busday_offset() function with practical examples, ranging from basic usage to more advanced applications.

Syntax & Parameters

Syntax:

numpy.busday_offset(dates, offsets, roll='raise', weekmask='1111100', holidays=[], busdaycal=None, out=None)

Parameters:

  • dates: array_like of datetime64[D], datetime.date, strings in ISO 8601 date format, indicating the start date(s) from which to calculate the offset.
  • offsets: array_like of int, the number of business days to offset from each date in dates. Can be positive (future dates) or negative (past dates).
  • roll: {‘raise’, ‘nat’, ‘forward’, ‘following’, ‘backward’, ‘preceding’, ‘modifiedfollowing’, ‘modifiedpreceding’}, specifies how to handle dates that fall on a non-business day. The default is ‘raise’, which raises an error.
  • weekmask: A seven-character string or array_like of booleans, indicating which days of the week are considered business days. The default '1111100' treats Saturday and Sunday as weekends.
  • holidays: An array_like object of datetime64[D], indicating the dates that should be excluded from the set of business days.
  • busdaycal: An instance of numpy.busdaycalendar, specifying the weekmask and holidays. If provided, it overrides weekmask and holidays.
  • out: An array to store the results. It must have the same shape as dates.

Returns:

  • output_dates: An array of datetime64[D], containing the calculated business day offsets.

Getting Started

Before diving into examples, ensure you have NumPy installed. You can install it via pip:

pip install numpy

Remember to import NumPy in your script to access its functionalities:

import numpy as np

Example 1: Basic Usage

The most straightforward use of numpy.busday_offset() is to find the next or previous business day. Here, we’ll start with a simple example of finding the next business day.

import numpy as np

start_date = '2023-04-14'  # A Friday

# Find the next business day
next_bus_day = np.busday_offset(start_date, offsets=1)
print(f'The next business day after {start_date} is {next_bus_day}')

Output:

The next business day after 2023-04-14 is 2023-04-17

This result highlights that the function automatically skips weekends.

Example 2: Specifying Weekmask

By default, numpy.busday_offset() considers Saturday and Sunday as weekends. You can customize this behaviour through the weekmask parameter.

Let’s find the next business day considering a week where only Sunday is a weekend:

import numpy as np

weekmask = 'Mon Tue Wed Thu Fri Sat'

next_bus_day = np.busday_offset('2023-04-14', offsets=1, weekmask=weekmask)
print(f'With our weekmask, the next business day is {next_bus_day}')

Output:

With our weekmask, the next business day is 2023-04-15

This example demonstrates how to adapt the function for different cultural or operational definitions of a business week.

Example 3: Accounting for Holidays

To skip specific days, like public holidays, use the holidays parameter. We’ll demonstrate by finding the next business day after a holiday.

import numpy as np

holidays = ['2023-04-17']  # Assume this date is a public holiday

next_bus_day = np.busday_offset('2023-04-14', offsets=1, weekmask='Mon Tue Wed Thu Fri', holidays=holidays)
print(f'Taking holidays into account, the next business day is {next_bus_day}')

Output:

Taking holidays into account, the next business day is 2023-04-18

This example highlights the importance of the holidays parameter in achieving accurate business date calculations.

Example 4: Advanced Usage – Roll

The roll parameter dictates what should happen if the target date falls on a non-business day. Options include ‘forward’, ‘backward’, or ‘modifiedfollowing’.

import numpy as np

holidays = ['2023-04-17']
roll = 'forward'

next_bus_day = np.busday_offset('2023-04-15', offsets=1, weekmask='Mon Tue Wed Thu Fri', holidays=holidays, roll=roll)
print(f'Using {roll} roll, the next business day is {next_bus_day}')

Output:

Using forward roll, the next business day is 2023-04-18

This functionality is crucial for flexible date calculation that respects business constraints.

Conclusion

The numpy.busday_offset() function is a versatile tool for manipulating dates in a business context. Through its parameters, users can account for weekends, holidays, and more, enabling precise date calculations essential for scheduling, financial analysis, and beyond. This tutorial provided a stepping stone into its capabilities, and with practice, you can leverage it to meet your unique date calculation needs.