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

如何无信息损失合并存在21秒偏移的两个30秒间隔Time Series?

合并带时间偏移的等间隔时间序列方案

针对你提到的两个每30秒生成一条、起始时间偏移21秒的时间序列(ts1从12:30:00开始,ts2从12:30:21开始),要在不丢失原始数据的前提下合并到同一索引,以下是几种实用方法(以Python pandas为例):

方法一:基于时间戳的外连接合并

这种方法直接保留两个序列的所有原始时间戳,将数据按时间索引对齐,缺失值用NaN填充,完全保留原始数据点。

步骤示例:

  1. 构造带时间索引的DataFrame(模拟你的数据):
import pandas as pd
import numpy as np

# 生成ts1数据
ts1_index = pd.date_range(start='2024-01-01 12:30:00', periods=5, freq='30S')
ts1 = pd.DataFrame({'ts1_value': np.arange(5)}, index=ts1_index)

# 生成ts2数据
ts2_index = pd.date_range(start='2024-01-01 12:30:21', periods=5, freq='30S')
ts2 = pd.DataFrame({'ts2_value': np.arange(5, 10)}, index=ts2_index)
  1. 执行外连接合并:
merged_df = pd.merge(ts1, ts2, left_index=True, right_index=True, how='outer')

合并后的结果会包含两个序列的所有时间戳,每个时间点对应各自的数值,没有数据的位置显示NaN,所有原始记录都被保留。

方法二:重采样到更细粒度的统一索引

如果需要连续的时间索引,可以将两个序列重采样到更细的时间粒度(比如1秒),再合并。这种方式能让时间轴连续,同时保留所有原始数据点。

步骤示例:

  1. 将两个序列重采样到1秒粒度(保留原始值,其余位置为NaN):
ts1_resampled = ts1.asfreq('1S')
ts2_resampled = ts2.asfreq('1S')
  1. 合并重采样后的序列:
merged_resampled = pd.concat([ts1_resampled, ts2_resampled], axis=1)

合并后的索引是连续的1秒时间戳,原始数据会精准对应到各自的生成时间,没有丢失任何信息。

方法三:保留联合时间戳作为索引

如果不需要连续索引,也可以直接将两个序列的时间戳合并成一个唯一的联合索引,再分别填充对应数据:

# 合并两个索引
combined_index = ts1_index.union(ts2_index)

# 重新索引两个序列并合并
ts1_reindexed = ts1.reindex(combined_index)
ts2_reindexed = ts2.reindex(combined_index)
merged_combined = pd.concat([ts1_reindexed, ts2_reindexed], axis=1)

这种方法和外连接效果类似,核心都是保留所有原始时间点和对应数据。

注意事项

  • 所有方法的核心是不丢弃任何原始数据记录,缺失值仅代表对应时间点无另一序列的数据,而非丢失信息。
  • 如果后续需要填充缺失值,可以根据业务场景选择向前填充(ffill)、向后填充(bfill)或插值,但这一步是可选的,不影响原始数据的保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:57:13