基于pick start时间区间自动递增生成shift number的技术需求
基于Pick Start时间生成递增班次编号的Pandas解决方案
实现步骤
合并日期与时间为完整时间戳
单独的day和pick start字段无法处理跨天场景,先合并成完整的datetime列:import pandas as pd # 假设你的DataFrame名为df df['datetime'] = pd.to_datetime(df['day'] + ' ' + df['pick start'])按时间排序数据
班次编号依赖时间顺序,必须确保数据按时间升序排列:df = df.sort_values('datetime').reset_index(drop=True)计算班次基准时间
核心逻辑:以每日22:00为班次切换点,22:00及之后的时间归为当日班次;22:00之前的时间归为前一天的22:00起始班次:# 初始化班次基准为当日22:00 df['shift_base'] = df['datetime'].dt.floor('D') + pd.Timedelta(hours=22) # 对于22:00之前的时间,基准时间调整为前一天的22:00 df.loc[df['datetime'].dt.time < pd.Timestamp('22:00:00').time(), 'shift_base'] -= pd.Timedelta(days=1)生成递增班次编号
对唯一的班次基准时间分配连续编号,并格式化为SHIFT X格式:# 生成从1开始的递增编号 shift_ranks = df['shift_base'].rank(method='dense', ascending=True).astype(int) # 确保编号从1起始(即使存在更早的历史数据) shift_ranks = shift_ranks - shift_ranks.min() + 1 df['shift number'] = 'SHIFT ' + shift_ranks.astype(str)可选:清理临时列
如果不需要中间列,可删除:df = df.drop(columns=['datetime', 'shift_base'])
结果验证
运行上述代码后,你的示例数据会生成预期的shift number列:
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/19/2024 06:30:00 SHIFT 2
内容的提问来源于stack exchange,提问作者awo
相关产品推荐
相关产品推荐

