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

使用Julia与DataFrames计算非对齐时间序列的差值

时间戳未对齐的时间-压力序列差值计算与量化方案

一、统一时间轴:解决差值计算的核心问题

由于两个设备采集的时间序列时间戳错位、行数不同,必须先将它们对齐到同一时间轴,才能直接计算压力差值。以下是两种实用方案:

方案1:生成固定时间间隔的插值序列

适合需要标准化时间粒度的场景,步骤如下:

  1. 统一时间范围:取两个序列的最早起始时间和最晚结束时间,覆盖全部数据区间。
  2. 生成固定间隔时间轴:根据数据精度(如毫秒、秒)生成等间隔时间戳。
  3. 插值对齐:将两个原始序列重索引到固定时间轴,用时间加权插值补全缺失值。

代码示例(基于Pandas):

import pandas as pd

# 1. 转换时间列为datetime类型并设为索引
df1['timestamp'] = pd.to_datetime(df1['timestamp'])
df2['timestamp'] = pd.to_datetime(df2['timestamp'])
df1 = df1.set_index('timestamp')
df2 = df2.set_index('timestamp')

# 2. 确定统一时间范围与间隔(示例用100ms,可按需调整)
start = min(df1.index.min(), df2.index.min())
end = max(df1.index.max(), df2.index.max())
fixed_timestamps = pd.date_range(start=start, end=end, freq='100ms')

# 3. 重索引+时间加权插值
df1_interp = df1.reindex(fixed_timestamps).interpolate(method='time')
df2_interp = df2.reindex(fixed_timestamps).interpolate(method='time')

# 4. 计算压力差值
diff_df = pd.DataFrame({
    'timestamp': fixed_timestamps,
    'pressure_diff': df2_interp['pressure'] - df1_interp['pressure']
})

方案2:基于某一序列的时间戳直接对齐

如果不需要固定间隔,可直接以数据量更大的df2的时间戳为基准,给df1插值补全:

# 以df2的时间戳为基准,对df1做时间加权插值
df1_aligned = df1.reindex(df2.index).interpolate(method='time')

# 计算逐点压力差值
df2['pressure_diff'] = df2['pressure'] - df1_aligned['pressure']

二、量化"208417"序列与其他序列的差异

除了逐点差值,可通过统计指标从整体层面量化差异:

  • 平均绝对误差(MAE):衡量整体偏差程度,abs(df2['pressure_diff']).mean()
  • 均方误差(MSE):放大极端偏差的影响,(df2['pressure_diff'] ** 2).mean()
  • 最大绝对误差:查看最大偏差值,abs(df2['pressure_diff']).max()
  • 皮尔逊相关系数:衡量两个序列的趋势一致性,取值越接近1趋势越重合,df1_interp['pressure'].corr(df2_interp['pressure'])

注意事项

  • 插值方法优先选method='time':该方法会根据时间间隔加权计算插值,比普通线性插值更贴合时间序列的变化规律。
  • 处理边缘缺失值:如果某段时间只有一个序列有数据,插值后会出现NaN,可根据需求用前后值填充或删除对应行。
  • 统一时间精度:确保两个序列的时间戳精度一致(如均为毫秒级),避免类型转换导致的对齐误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:55:37