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)
最后删除了我不想要的列。
我创建了一个 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)
最后删除了我不想要的列。