Информация о Pandas календарях рынка находится здесь: https://pypi.org/project/pandas-market-calendars/
Сначала создайте объект рыночных данных, как описано в ссылке:
import pandas_market_calendars as mcal
# Create a calendar
nyse = mcal.get_calendar('NYSE')
early = nyse.schedule(start_date='2012-07-01', end_date='2012-07-10')
print(mcal.date_range(early, frequency='1D'))
DatetimeIndex(['2012-07-02 20:00:00+00:00', '2012-07-03 17:00:00+00:00',
'2012-07-05 20:00:00+00:00', '2012-07-06 20:00:00+00:00',
'2012-07-09 20:00:00+00:00', '2012-07-10 20:00:00+00:00'],
dtype='datetime64[ns, UTC]', freq=None)
Теперь создайте серию со значением единиц и проиндексированную рыночными днями. Затем выполните повторную индексацию по календарным дням и заполните недостающие значения нулями. Вычислить совокупную сумму, а количество торговых дней между двумя датами - это разница между совокупными суммами в разные даты:
import pandas as pd
bus_day_index = pd.DatetimeIndex(
['2012-07-02 20:00:00+00:00', '2012-07-03 17:00:00+00:00',
'2012-07-05 20:00:00+00:00', '2012-07-06 20:00:00+00:00',
'2012-07-09 20:00:00+00:00', '2012-07-10 20:00:00+00:00'],
dtype='datetime64[ns, UTC]', freq=None)
bus_day_index = bus_day_index.normalize()
s = pd.Series(data=1, index=bus_day_index)
cal_day_index = pd.date_range(start=bus_day_index.min(), end=bus_day_index.max())
s = s.reindex(index=cal_day_index).fillna(0).astype(int)
s = s.cumsum()
s['2012-07-09'] - s['2012-07-03']
Преимущество: этот (неэлегантный) метод включает неторговые дни, приходящиеся на будние дни (День памяти, День труда, et c. В США).