You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pandas时间序列DataFrame中创建单列标记节假日为1、非节假日为0

解决方案

报错原因

  • 原生Python的or/and逻辑运算符无法直接作用于pandas布尔序列,必须使用pandas支持的按位运算符|(或)、&(且),且每个判断条件需要用括号包裹避免优先级错误
  • 你生成的hols是按天维度的索引,而原df是小时维度的索引,索引维度不匹配直接赋值会出错
  • 原有np.where的返回值写反了:条件成立代表是节假日,你返回了0,不符合节假日标1的需求

最优实现方案(推荐)

不需要生成节假日独热编码再合并,直接判断日期是否在法定节假日列表即可,代码简洁不易出错:

# 提取所有法定节假日的日期对象
holiday_list = cal.holidays(start=first, end=last).date
# 判断df每行的日期是否属于节假日,转成整数即可得到1/0标记
df['holiday'] = df.index.date.isin(holiday_list).astype(int)

原有写法修正方案

如果你要沿用现有hols独热编码的逻辑,修改后代码如下:

# 按行聚合所有节假日列,当天只要有一个节假日标记为1就返回1
hols['is_holiday'] = hols.max(axis=1)
# 将天维度的节假日标记匹配到df的小时维度索引,非节假日填充0
df['holiday'] = df.index.normalize().map(hols['is_holiday']).fillna(0).astype(int)

内容的提问来源于stack exchange,提问作者bbartling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 20:06:03