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

如何基于时间戳为Pandas时序数据区分重叠数值区间打标签?

时序数据阶段标记解决方案

针对你这种数值范围重叠的时序数据标记需求,核心思路是基于时间序列的阶段顺序+数值特征来区分两个阶段,而非仅依赖数值区间。以下是用Python Pandas实现的具体方案:

核心逻辑

  1. 第一阶段(标记Y):首次出现数值稳定在100-160区间且持续一段时间(你的场景对应约2分钟、12个10秒采样点)的连续时间段。
  2. 第二阶段(标记N):在第一阶段结束后,当数值突破160进入更高区间(100-300+),后续即使数值回落至100-160,也统一标记为N。

代码实现

假设你的数据已读取为Pandas DataFrame,执行以下步骤:

1. 预处理时间列

import pandas as pd

# 读取数据(替换为你的数据路径)
df = pd.read_csv('your_data.csv', sep='\s+', parse_dates=['TimeStamp'])
# 将时间列设为索引,方便时序操作
df = df.set_index('TimeStamp')
# 初始化Label列
df['Label'] = ''

2. 识别第一阶段(标记Y)

# 筛选数值在100-160的行
mask_stage1_candidate = (df['Data'] >= 100) & (df['Data'] <= 160)
# 标记连续的数值块
df['block'] = (mask_stage1_candidate != mask_stage1_candidate.shift()).cumsum()
# 计算每个块的采样点数量
block_length = df[mask_stage1_candidate].groupby('block').size()
# 找到第一个符合时长要求的块(此处以12个采样点为例,可根据实际调整)
target_block = block_length[block_length >= 12].index[0]
# 标记该块为Y
df.loc[df['block'] == target_block, 'Label'] = 'Y'

3. 识别第二阶段(标记N)

# 找到第一阶段的结束时间
stage1_end_time = df[df['Label'] == 'Y'].index[-1]
# 筛选第一阶段后、数值≥100的行(覆盖100-300+区间)
mask_stage2 = (df.index > stage1_end_time) & (df['Data'] >= 100)
# 标记第二阶段为N
df.loc[mask_stage2, 'Label'] = 'N'

4. 清理临时列

df = df.drop('block', axis=1)

适配样例数据

如果你的样例中第一阶段仅有8个采样点,可将步骤2中的block_length >= 12调整为block_length >= 8,即可匹配样例中的Y标记。

关键说明

  • 方案依赖阶段出现顺序:先Y阶段、后N阶段,完全匹配你的数据场景。
  • 连续时长阈值可根据实际业务灵活调整,确保准确识别第一阶段的稳定区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:08:10