isin holidays 只识别第一个小时

isin holidays only recognizing the first hour

我创建了一个 class 在西班牙度假

class SpainBusinessCalendar(AbstractHolidayCalendar):
   rules = [
     #Spain - If one holiday is on a Sunday, each Autonomous Community can change it to a Monday.
     Holiday('Año Nuevo', month=1, day=1, observance=sunday_to_monday),
     Holiday('Epifanía del Señor', month=1, day=6, observance=sunday_to_monday),
     Holiday('Viernes Santo', month=1, day=1, offset=[Easter(), Day(-2)]),
     Holiday('Día del Trabajador', month=5, day=1, observance=sunday_to_monday),
     Holiday('Asunción de la Virgen', month=8, day=15, observance=sunday_to_monday),
     Holiday('Día de la Hispanidad', month=10, day=12, observance=sunday_to_monday),
     Holiday('Todos los Santos', month=11, day=1, observance=sunday_to_monday),
     Holiday('Día Constitución', month=12, day=6, observance=sunday_to_monday),
     Holiday('Inmaculada Concepción', month=12, day=8, observance=sunday_to_monday),        
     Holiday('Navidad', month=12, day=25, observance=sunday_to_monday)
   ]

然后我在我的数据框中生成了一个大小等于日期列的文件

cal = SpainBusinessCalendar()
holidays = cal.holidays(start=df['Date'].min(), end=df['Date'].max())

给出以下内容

为了根据列 "Date" 中的值生成带有假期的 df 列,我已完成

df['Feriado'] = df['Date'].isin(holidays).astype(int)

但是,正如可以从 holidays 输出的图像中猜测的那样,如果处理的是每小时数据,在这种情况下,它只会在第一个小时(时间00:00).

我应该如何进行才能在 holidays 的分析中忽略小时,并为特定的假期分配相应的值。


编辑

两者都

holidays = cal.holidays(start=df['Data'].dt.date.min(), end=df['Data'].dt.date.max())

holidays = cal.holidays(start=df['Data'].dt.floor('d').min(), end=df['Data'].dt.floor('d').max())

给出与上图相同的输出。

创建了一个包含日期但不包含时间部分的列

df['Date_notime'] = df['Data'].dt.floor('d')

然后根据该列生成假期

holidays = cal.holidays(start=df['Date_notime'].dt.date.min(), end=df['Date_notime'].dt.date.max())

和那时一样

df['Feriado'] = df['Date_notime'].isin(holidays).astype(int)

最后删除了我不想要的列。