0

我在西班牙创建了一个假期类

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())

这给出了以下

在此处输入图像描述

为了生成df带有假期的列,由列中的值产生"Date",我已经完成了

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())

给出与上图相同的输出。

4

1 回答 1

1

使用没有时间组件的日期创建了一个列

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)

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

于 2021-01-12T20:40:31.367 回答