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

如何用Pandas创建工作日7:00-17:00的时间序列布尔哑变量?

解决方案:创建工作日7:00-17:00的布尔哑变量

报错原因

你在apply的lambda里调用df.index.weekday <=4时,这是对整个DataFrame索引的批量判断,返回的是布尔数组;而lambda中的hr是单个值,两者做逻辑判断会触发歧义错误(数组的真值无法直接判定)。

正确实现方法

方法一:矢量化操作(推荐,效率更高)

直接基于索引的属性做批量逻辑判断,无需逐行迭代:

# 利用索引的hour和weekday属性生成布尔条件,转成0/1整数
df['7AM_to_5PM'] = ((df.index.hour > 7) & (df.index.hour < 17) & (df.index.weekday <= 4)).astype(int)
  • 逻辑与操作要用&(Pandas数组的逻辑运算符),不能用Python的and
  • 最后用astype(int)把布尔值转成1/0的哑变量

方法二:逐行apply(不推荐,适合理解逻辑)

如果一定要用apply,需要指定axis=1逐行处理,通过row.name获取当前行的索引:

df['hour'] = df.index.hour  # 直接用索引的hour属性,无需转字符串再转整数
df['7AM_to_5PM'] = df.apply(lambda row: 1 if (row['hour'] >7 and row['hour'] <17 and row.name.weekday <=4) else 0, axis=1)

最终使用

生成绘图用DataFrame的代码无需修改:

df_scatter = df[['oat','electricity','7AM_to_5PM']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:04:58