我有一个包含 3 个字段的 df,如下所示,我希望根据拾取开始时间增量生成班次编号。 如果选择22:00到0600之间的开始时间,则为班次1;然后迭代 pick start 中的所有值以增量标记班次编号。
day pick start shift number
4/17/2024 22:27:08 SHIFT 1
4/17/2024 22:33:08 SHIFT 1
4/18/2024 06:27:08 SHIFT 1
4/18/2024 22:28:09 SHIFT 2
4/18/2024 06:30:00 SHIFT 2
感谢您的帮助!
总结一下逻辑,新的轮班从 06:30 开始,因此您可以将每个日期时间减去 06:30(用
to_datetime
转换),normalize
日期,得到 diff
并根据对新“天”的更改增加班次,并使用 cumsum
:
date = pd.to_datetime(df['day']+df['pick start'], format='%m/%d/%Y%H:%M:%S')
new = date.sub(pd.Timedelta('06:30:00')).dt.normalize().diff().ge('1d')
df['shift number'] = 'SHIFT ' + new.cumsum().add(1).astype(str)
输出:
day pick start shift number
0 4/17/2024 22:27:08 SHIFT 1
1 4/17/2024 22:33:08 SHIFT 1
2 4/18/2024 06:27:08 SHIFT 1
3 4/18/2024 22:28:09 SHIFT 2
4 4/18/2024 06:30:00 SHIFT 2
中间体:
day pick start date sub('06:30') normalize diff gt('1d') cumsum shift number
0 4/17/2024 22:27:08 2024-04-17 22:27:08 2024-04-17 15:57:08 2024-04-17 NaT False 0 SHIFT 1
1 4/17/2024 22:33:08 2024-04-17 22:33:08 2024-04-17 16:03:08 2024-04-17 0 days False 0 SHIFT 1
2 4/18/2024 06:27:08 2024-04-18 06:27:08 2024-04-17 23:57:08 2024-04-17 0 days False 0 SHIFT 1
3 4/18/2024 22:28:09 2024-04-18 22:28:09 2024-04-18 15:58:09 2024-04-18 1 days True 1 SHIFT 2
4 4/18/2024 06:30:00 2024-04-18 06:30:00 2024-04-18 00:00:00 2024-04-18 0 days False 1 SHIFT 2