如何在时序数据集中标记特定时间区间内的行(睡眠时段标记)
问题解决:判断Datetime是否处于睡眠时间区间
错误原因分析
你写的代码里,merged[merged['sleep_start_time']]这类写法完全错误——你把列的值当成了DataFrame的列名去索引,这直接触发KeyError,因为这些时间值根本不是数据集的列名。
正确实现方式
直接对列进行逐元素比较,即可生成判断结果:
方法1:生成布尔列(可转为0/1整数)
# 先生成布尔值列,True代表该时间点处于睡眠区间内 merged['sleep'] = (merged['sleep_start_time'] <= merged['datetime']) & (merged['datetime'] <= merged['sleep_end_time']) # 若需要将布尔值转为0/1整数格式 merged['sleep'] = merged['sleep'].astype(int)
方法2:用numpy快速生成0/1列
import numpy as np merged['sleep'] = np.where( (merged['sleep_start_time'] <= merged['datetime']) & (merged['datetime'] <= merged['sleep_end_time']), 1, 0 )
验证说明
针对你提供的样本数据,运行上述代码后,所有行的sleep列都会返回0,完全符合预期。
内容的提问来源于stack exchange,提问作者Chelsea
相关产品推荐
相关产品推荐

