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

基于pick start时间区间自动递增生成shift number的技术需求

基于Pick Start时间生成递增班次编号的Pandas解决方案

实现步骤

  1. 合并日期与时间为完整时间戳
    单独的day和pick start字段无法处理跨天场景,先合并成完整的datetime列:

    import pandas as pd
    
    # 假设你的DataFrame名为df
    df['datetime'] = pd.to_datetime(df['day'] + ' ' + df['pick start'])
    
  2. 按时间排序数据
    班次编号依赖时间顺序,必须确保数据按时间升序排列:

    df = df.sort_values('datetime').reset_index(drop=True)
    
  3. 计算班次基准时间
    核心逻辑:以每日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)
    
  4. 生成递增班次编号
    对唯一的班次基准时间分配连续编号,并格式化为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)
    
  5. 可选:清理临时列
    如果不需要中间列,可删除:

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:25:29