python检查是否是基于日期的假日

daupos2t  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(338)

我有一个过去3年的数据集,我想添加一个基于假期的新专栏。当我尝试这个:

import holidays
de_holidays = holidays.DE()
for date, name in sorted(holidays.DE(years=2021).items()):
   print(date, name)

我得到了结果

2021-01-01 Neujahr
2021-04-02 Karfreitag
2021-04-05 Ostermontag
2021-05-01 Erster Mai
2021-05-13 Christi Himmelfahrt
2021-05-24 Pfingstmontag
2021-10-03 Tag der Deutschen Einheit
2021-12-25 Erster Weihnachtstag
2021-12-26 Zweiter Weihnachtstag

现在,我想在我现有的数据集中创建一个新的列,在假日时使用true/false。我尝试使用下面的代码片段。

My Date column looks something like this: Dtype is datetime64[ns]
2021-07-22  
2021-07-21  
2021-07-20  
2021-07-19  

# I used the code

import holidays
de_holidays = holidays.DE()
df['Holiday'] = df['Date'].isin(de_holidays)
rslt_df

rslt_df.loc[rslt_df['Date'] == '2021-05-13']

我期望的结果是真的,因为5月13日是一个假期,但我意识到这段代码给出了所有错误的值。有人能帮忙吗?
编辑

12390   2021-07-22
12380   2021-07-21
12370   2021-07-20
12360   2021-07-19
12350   2021-07-18
           ...    
40      2018-03-05
30      2018-03-04
20      2018-03-03
10      2018-03-02
0       2018-03-01
Name: Date, Length: 1240, dtype: datetime64[ns]

现在当我使用

df['Holiday'] = df['Date'].isin(holidays.DE(years=2021))

我得到了正确的真/假值,但一旦我删除了“年份”选项卡,我就得到了所有的假值

df['Holiday'] = df['Date'].isin(holidays.DE())
kg7wmglp

kg7wmglp1#

首先,您需要确保有一个datetime列。
然后使用 isinkeys 如果我理解了文档的话,它是一个datetime对象(您没有提供字典示例)

import numpy as np

df['Date'] = pd.to_datetime(df['Date'])
years = [range(2021-4, 2022)]
df['Holiday'] = np.where(df['Date'].isin(holidays.DE(
                                 years=years ).keys(), 1,0)
print(df)

        Date  Holiday
0 2021-07-22        0
1 2021-07-21        0
2 2021-07-20        0
3 2021-07-19        0
4 2021-07-18        0

相关问题