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

如何基于时间列给数据集添加First Shift等班次标签?现有方法无效求助

解决方案:基于时间区间匹配班次

问题分析

你之前的代码存在两个核心问题:

  1. 仅用整数小时划分区间,未处理时分秒级别的精确时间(比如7:00:00和17:00:01的临界值);
  2. 未覆盖跨天的时间区间(17:00:01至次日4:00:00),且区间划分逻辑与需求不符(比如把7:00:00错误归为Dead Time)。

正确实现步骤

要准确匹配班次,需先将Date和Time合并为完整的datetime对象,再通过精确的时间区间判断班次。

1. 数据准备与datetime合并

假设你的数据集已加载为df,首先合并日期和时间列:

import pandas as pd
import numpy as np

# 加载数据(示例)
data = {
    'Date': ['2022-04-13', '2022-09-07', '2022-04-13', '2022-04-14'],
    'Time': ['16:57:00', '10:46:00', '03:30:00', '05:00:00']
}
df = pd.DataFrame(data)

# 合并Date和Time为datetime列
df['Datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time'])

2. 基于时间区间匹配班次

使用np.select按需求定义条件和对应班次:

# 定义时间区间条件
conditions = [
    # First Shift: 当日7:00:00 至 17:00:00
    (df['Datetime'].dt.time >= pd.to_datetime('07:00:00').time()) &
    (df['Datetime'].dt.time <= pd.to_datetime('17:00:00').time()),
    # Dead Time: 当日4:00:01 至 6:59:59
    (df['Datetime'].dt.time >= pd.to_datetime('04:00:01').time()) &
    (df['Datetime'].dt.time <= pd.to_datetime('06:59:59').time()),
    # Second Shift: 17:00:01至当日23:59:59,或次日00:00:00至4:00:00
    (df['Datetime'].dt.time >= pd.to_datetime('17:00:01').time()) |
    (df['Datetime'].dt.time <= pd.to_datetime('04:00:00').time())
]

# 对应班次名称
choices = ['First Shift', 'Dead Time', 'Second Shift']

# 生成班次列
df['Shifts'] = np.select(conditions, choices, default='Unknown')

3. 结果验证

运行后你的样例数据会得到如下结果:

DateTimeDatetimeShifts
2022-04-1316:57:002022-04-13 16:57:00First Shift
2022-09-0710:46:002022-09-07 10:46:00First Shift
2022-04-1303:30:002022-04-13 03:30:00Second Shift
2022-04-1405:00:002022-04-14 05:00:00Dead Time

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:15:43