如何在Python时序DataFrame中识别美国节假日并标记布尔值
检测DataFrame中的日期是否为美国节假日
我有一个包含多年数据的DataFrame,希望检测其中的日期是否为美国节假日,并为其标记True/False或1/0。
初始代码
import pandas as pd df = pd.DataFrame(index=['2004-10-01', '2004-10-02', '2004-10-03', '2004-10-04', '2004-10-05', '2004-10-06', '2004-10-07', '2004-10-08', '2004-10-09', '2004-10-10', '2018-07-25', '2018-07-26', '2018-07-27', '2018-07-28', '2018-07-29', '2018-07-30', '2018-07-31', '2018-08-01', '2018-08-02', '2018-08-03']) import holidays # 获取美国节假日 hldys = holidays.country_holidays('US') # 尝试将检测逻辑应用到DataFrame的每个索引日期 df['isHoliday?'] = df.index.map(lambda x: hldy.get(x))
当前输出
isHoliday? 2004-10-01 None 2004-10-02 None 2004-10-03 None 2004-10-04 None 2004-10-05 None 2004-10-06 None 2004-10-07 None 2004-10-08 None 2004-10-09 None 2004-10-10 None 2018-07-25 None 2018-07-26 None 2018-07-27 None 2018-07-28 None 2018-07-29 None 2018-07-30 None 2018-07-31 None 2018-08-01 None 2018-08-02 None
更新:已找到解决方案
us_hldys = holidays.country_holidays('US') df['isHoliday?'] = df.index.to_series().apply(lambda x: x in us_hldys)
解决方案输出
isHoliday? 2004-10-01 False 2004-10-02 False 2004-10-03 False 2004-10-04 False 2004-10-05 False 2004-10-06 False 2004-10-07 False 2004-10-08 False 2004-10-09 False 2004-10-10 False 2018-07-25 False 2018-07-26 False 2018-07-27 False 2018-07-28 False 2018-07-29 False 2018-07-30 False 2018-07-31 False 2018-08-01 False 2018-08-02 False 2018-08-03 False
内容的提问来源于Stack Exchange,提问作者Mainland
相关产品推荐
相关产品推荐

