根据另一列中的时间限制递增行块的编号

问题描述 投票:0回答:1

我有一个包含 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

感谢您的帮助!

pandas string dataframe datetime
1个回答
0
投票

总结一下逻辑,新的轮班从 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
© www.soinside.com 2019 - 2024. All rights reserved.