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

如何在Python中将单列重复脉冲时间序列数据拆分为离散列

解决方案

核心思路:基于响应值的突变(一阶差分)识别脉冲边界

从你提供的脉冲数据特征来看,每个脉冲周期的起始都伴随响应值的大幅跳变,这和正常波动的小幅增长有明显差异。放弃固定行数的判断逻辑,改用响应值的一阶差分捕捉这种突变,是更可靠的拆分方案:

  • 计算响应值的一阶差分:得到每行与前一行的响应值变化量
  • 自动生成突变阈值:用差分数据的分位数(比如95%)区分“大幅跳变”和“小幅波动”
  • 标记脉冲起始点:筛选出差分超过阈值的位置,作为每个脉冲的起始边界
  • 拆分数据集:根据起始点将完整数据分割为单个脉冲的子数据集

代码实现(Jupyter Notebook中运行)

import pandas as pd
import numpy as np

# 读取CSV数据(替换为你的文件路径)
df = pd.read_csv('your_data.csv')

# 计算响应值的一阶差分(第一行无前置数据,设为NaN)
df['response_diff'] = df['response'].diff()

# 自动计算突变阈值:取差分的95%分位数(可根据数据调整分位数)
threshold = df['response_diff'].quantile(0.95)

# 标记脉冲起始点:排除第一行,只保留差分超过阈值的行
df['pulse_start'] = (df['response_diff'] > threshold) & (df.index != 0)

# 获取所有脉冲起始的索引,追加最后一行索引方便拆分
pulse_starts = df[df['pulse_start']].index.tolist()
pulse_starts.append(df.index[-1] + 1)

# 拆分数据为单个脉冲的子数据集
pulse_datasets = []
for i in range(len(pulse_starts)-1):
    start_idx = pulse_starts[i]
    end_idx = pulse_starts[i+1]
    pulse_data = df.iloc[start_idx:end_idx].copy()
    # 可选:重置每个脉冲的相对时间(从0开始)
    pulse_data['relative_time'] = pulse_data['elapsed time'] - pulse_data['elapsed time'].iloc[0]
    pulse_datasets.append(pulse_data)

# 示例:打印第一个脉冲的前5行数据
print("第一个脉冲数据预览:")
print(pulse_datasets[0][['elapsed time', 'response', 'relative_time']].head())

优化调整建议

  • 若阈值不合适,可尝试调整分位数(比如90%、97%),或根据业务知识设置固定阈值
  • 若脉冲结束后存在明显下降,可结合差分的负值进一步优化边界判断
  • 可可视化差分数据验证识别效果:
import matplotlib.pyplot as plt

plt.figure(figsize=(12,6))
plt.plot(df['elapsed time'], df['response_diff'], label='Response Difference')
plt.axhline(y=threshold, color='r', linestyle='--', label=f'Threshold (95% quantile): {threshold:.2f}')
plt.scatter(df[df['pulse_start']]['elapsed time'], df[df['pulse_start']]['response_diff'], color='g', label='Pulse Starts')
plt.xlabel('Elapsed Time')
plt.ylabel('Response Difference')
plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:12:28