[英]Pandas isin holidays.country_holidays incorrectly returns only False on 1st attempt but correct results on 2nd attempt
[英]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)
]
然后我生成一個大小等於我的 dataframe 中的日期列
cal = SpainBusinessCalendar()
holidays = cal.holidays(start=df['Date'].min(), end=df['Date'].max())
這給出了以下
為了生成一個帶有假期的df
列,由"Date"
列中的值產生,我已經完成了
df['Feriado'] = df['Date'].isin(holidays).astype(int)
但是,正如人們從holidays
output 的圖像中可以猜到的那樣,如果使用的是每小時數據,在這種情況下,它只會在第一個小時(時間為 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())
給出與上圖相同的 output。
使用沒有時間組件的日期創建了一個列
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)
最后刪除了我不想要的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.