Python时间序列分段:为生产步骤生成ID列的技术求助
生产步骤时间序列分段与ID生成解决方案
你的代码仅覆盖了「从高位(>=88)跳转到低位(<18)」这一种新周期触发场景,未处理「步骤从0恢复到生产步骤」的情况,这正是骤降后分段结果不符合预期的核心原因。以下是修正后的方案:
修正代码
import pandas as pd # 处理第一行边界:若第一行是生产步骤(>0),标记为新周期起点 first_cycle_start = production_day_copy.iloc[0]['step'] > 0 # 定义新周期触发的两种核心场景 production_day_copy['new_production_cycle'] = ( # 场景1:从高位骤降到低位(含直接跳回起始步骤) (production_day_copy['step'].shift() >= 88) & (production_day_copy['step'] < 18) ) | ( # 场景2:从0恢复生产,启动新周期 (production_day_copy['step'].shift() == 0) & (production_day_copy['step'] > 0) ) # 修正第一行的标记值 production_day_copy.loc[0, 'new_production_cycle'] = first_cycle_start # 生成连续的周期ID production_day_copy['production_cycle_id'] = production_day_copy['new_production_cycle'].cumsum() + 1
代码说明
- 新增「从0恢复生产」的触发逻辑,完整覆盖步骤骤降为0后开启新周期的场景
- 处理了第一行边界情况:如果数据开头就是生产步骤,会被正确标记为第一个周期的起点
- 保留了你原有的「高位跳低位」逻辑,兼容非骤降回起始步骤的场景
内容的提问来源于stack exchange,提问作者Dave Whatever
相关产品推荐
相关产品推荐

