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

基于接近开关脉冲将时间序列切分为10等份并新增Label列的实现

传感器时间序列区间分块打标签方案

需求描述

  • 数据集为包含3个传感器采集结果的时间序列,其中Sensor_3是检测设备转数的接近开关,设备转速变化时,该传感器输出的脉冲时间间隔会同步变化
  • 需将相邻两个脉冲之间的所有采集数据切分为10个大小相等的块,允许块内数据行数无法被10整除
  • 最终在原DataFrame中新增Label列,标记每行数据所属的区间

示例数据

原始输入

Timestamp     Sensor_1  Sensor_2  Sensor_3
1636496284130    60.875    35.946       0
1636496284132    58.467    33.889       0
1636496284134    58.668    37.253       0
1636496284136    57.966    30.540       0
1636496284138    56.712    33.254       0

期望输出

Timestamp     Sensor_1  Sensor_2  Sensor_3    Label
1636496284130    60.875    35.946       0         A
1636496284132    58.467    33.889       0         A
1636496284134    58.668    37.253       0         A
1636496284136    57.966    30.540       0         A
1636496284138    56.712    33.254       0         A

实现代码(Python + Pandas)

import pandas as pd

# 此处df为已经读取到内存的原始数据集DataFrame
# 1. 识别脉冲位置,可根据实际脉冲的电平值调整判断条件,此处默认脉冲高电平为1
blip_positions = df[df['Sensor_3'] == 1].index.tolist()
# 补充边界索引,覆盖数据首尾的完整区间
blip_positions = [-1] + blip_positions + [df.shape[0]]

all_labels = []
for seg_idx in range(len(blip_positions) - 1):
    seg_start = blip_positions[seg_idx] + 1
    seg_end = blip_positions[seg_idx + 1]
    seg_total_rows = seg_end - seg_start
    if seg_total_rows <= 0:
        continue
    # 为区间内每行分配标签,A-J对应10个分块
    for row_offset in range(seg_total_rows):
        block_num = int(row_offset * 10 / seg_total_rows)
        all_labels.append(chr(ord('A') + block_num))

# 写入标签列
df['Label'] = all_labels

适配说明

  • 若实际数据中Sensor_3的脉冲触发值不是1,自行调整df['Sensor_3'] == 1的判断条件即可
  • 若需要数字格式的标签,将chr(ord('A') + block_num)替换为block_num + 1,即可生成1-10的数字标签
  • 代码自动适配任意长度的脉冲区间,无需手动处理行数不能被10整除的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:08