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

基于序列号与失效标签定义失效时间窗的标签重标注问题

代码调整思路

核心问题是原有逻辑没有关联设备序列号,仅收集全局所有失效日期的前3天范围统一打标,修改后改为按序列号分组,单独计算每个序列号自身失效日期对应的前置窗口:

  1. 按设备序列号分组,每个分组内单独处理该设备的失效记录
  2. 对每个设备的每一条失效记录,生成失效日期前3天~失效当日的时间窗口
  3. 仅将该设备在对应窗口内的记录标签修改为1,不影响其他设备的同日期记录

调整后可直接运行的代码

import pandas as pd
import numpy as np
import datetime
from datetime import timedelta

# 基础数据读取和预处理
df = pd.read_excel('/content/failure.xlsx') 
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(by="date").reset_index(drop=True)
# 标注窗口长度:失效前3天
window_days = 3

def label_failure_window(group):
    # 取当前序列号的所有失效日期
    failure_dates = group[group['failure'] == 1]['date'].unique()
    # 遍历每个失效日期,生成对应的标注窗口
    for fail_date in failure_dates:
        window_start = fail_date - timedelta(days=window_days)
        # 将当前序列号在窗口内的failure标签设为1
        group.loc[(group['date'] >= window_start) & (group['date'] <= fail_date), 'failure'] = 1
    return group

# 注意:此处将'serial_number'替换为你数据表中实际存储序列号的列名
df = df.groupby('serial_number', group_keys=False).apply(label_failure_window)

逻辑验证

针对你给出的示例场景:

  • 序列号C失效日期为2014-01-05:仅将序列号C 2014-01-02至2014-01-05的记录标1,不影响其他设备
  • 序列号A失效日期为2014-01-06、2014-01-07:仅将序列号A 2014-01-03至2014-01-07的记录标1,不影响其他设备

完全符合按单设备独立计算窗口的需求,且避免了原有代码嵌套循环的性能问题,适合大数据量场景使用。


内容的提问来源于stack exchange,提问作者ForestGump

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:04