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

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

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

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

我得到了结果

  1. 2021-01-01 Neujahr
  2. 2021-04-02 Karfreitag
  3. 2021-04-05 Ostermontag
  4. 2021-05-01 Erster Mai
  5. 2021-05-13 Christi Himmelfahrt
  6. 2021-05-24 Pfingstmontag
  7. 2021-10-03 Tag der Deutschen Einheit
  8. 2021-12-25 Erster Weihnachtstag
  9. 2021-12-26 Zweiter Weihnachtstag

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

  1. My Date column looks something like this: Dtype is datetime64[ns]
  2. 2021-07-22
  3. 2021-07-21
  4. 2021-07-20
  5. 2021-07-19
  6. # I used the code
  7. import holidays
  8. de_holidays = holidays.DE()
  9. df['Holiday'] = df['Date'].isin(de_holidays)
  10. rslt_df
  11. rslt_df.loc[rslt_df['Date'] == '2021-05-13']

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

  1. 12390 2021-07-22
  2. 12380 2021-07-21
  3. 12370 2021-07-20
  4. 12360 2021-07-19
  5. 12350 2021-07-18
  6. ...
  7. 40 2018-03-05
  8. 30 2018-03-04
  9. 20 2018-03-03
  10. 10 2018-03-02
  11. 0 2018-03-01
  12. Name: Date, Length: 1240, dtype: datetime64[ns]

现在当我使用

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

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

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

kg7wmglp1#

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

  1. import numpy as np
  2. df['Date'] = pd.to_datetime(df['Date'])
  3. years = [range(2021-4, 2022)]
  4. df['Holiday'] = np.where(df['Date'].isin(holidays.DE(
  5. years=years ).keys(), 1,0)
  1. print(df)
  2. Date Holiday
  3. 0 2021-07-22 0
  4. 1 2021-07-21 0
  5. 2 2021-07-20 0
  6. 3 2021-07-19 0
  7. 4 2021-07-18 0
展开查看全部

相关问题