Я пытался использовать функцию pandas 'Праздники для почасовых данных, чтобы получить логический массив numpy, в котором все 24 часа праздника возвращаются как Ложные. Я сделал эту работу с df.apply (), но это не очень эффективно. Код ниже:
import pandas as pd
from pandas.tseries.holiday import Holiday, nearest_workday
from dateutil.relativedelta import MO
from dataclasses import dataclass
dt = pd.date_range(start='1/1/2019', end='12/31/2019', freq='H')
@dataclass
class Custom_Holidays:
# todo: rework; Holiday object has start_date and end_date
labor_day = Holiday('Labor Day', month=9, day=1, offset=pd.DateOffset(weekday=MO(1)))
independence_day = Holiday('Independence Day', month=7, day=4)
holidays = Custom_Holidays()
# this only filters out 1 hour instead of 24 hours
independence_day_mask = ~dt.isin(holidays.independence_day.dates(dt[0], dt[-1]))
labor_day_mask = ~dt.isin(holidays.labor_day.dates(dt[0], dt[-1]))
# tests fail -- this should filter out
assert len(dt) - np.sum(independence_day_mask*1) == 24
assert len(dt) - np.sum(independence_day_mask*1) == 24
Я думаю, что это связано с применением маски против часовых значений, а не дневных значений, но все же, я думаю, это должно сработать.