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

在Pandas中根据睡眠/唤醒时间区间设置二进制wake列

修正代码实现wake二进制列的生成

原代码存在的问题

  • 字段引用错误:原代码使用df_clean2.time,但数据集实际字段名为current_time,导致逻辑判断基于错误字段
  • 逻辑关系反转:np.where的取值逻辑与需求不符,原代码满足「不在睡眠区间」时保留初始值0,否则设为1,而实际需求是「处于睡眠区间内」为0,「不在区间内」为1
  • 潜在类型问题:若时间字段为字符串类型,直接比较会导致逻辑错误,需确保字段为时间类型(如datetime.time)

修正后的代码

第一步:确保时间字段为正确类型(若原始数据是字符串格式)

from datetime import datetime

# 将字符串格式的时间转换为time类型
df_clean2['current_time'] = df_clean2['current_time'].apply(lambda x: datetime.strptime(x, '%H:%M').time())
df_clean2['asleep'] = df_clean2['asleep'].apply(lambda x: datetime.strptime(x, '%H:%M').time())
df_clean2['wokeup'] = df_clean2['wokeup'].apply(lambda x: datetime.strptime(x, '%H:%M').time())

第二步:生成wake列

import numpy as np

# 核心逻辑:current_time在asleep到wokeup区间内时赋值0,否则赋值1
df_clean2['wake'] = np.where(
    (df_clean2['current_time'] >= df_clean2['asleep']) & (df_clean2['current_time'] <= df_clean2['wokeup']),
    0,
    1
)

补充:处理跨天睡眠场景(如asleep为22:00,wokeup为06:00)

如果存在睡眠区间跨午夜的情况,需要调整逻辑判断:

df_clean2['wake'] = np.where(
    # 分两种情况:区间不跨天 或 区间跨天且current_time在00:00到wokeup之间
    ((df_clean2['asleep'] <= df_clean2['wokeup']) & (df_clean2['current_time'] >= df_clean2['asleep']) & (df_clean2['current_time'] <= df_clean2['wokeup'])) |
    ((df_clean2['asleep'] > df_clean2['wokeup']) & (df_clean2['current_time'] >= df_clean2['asleep']) | (df_clean2['current_time'] <= df_clean2['wokeup'])),
    0,
    1
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:01:17