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

非等距时间戳的Pandas DataFrame高效重采样需求

高效实现非等距传感器数据的等间隔重采样(保留原始采样)

针对非等距时间戳的传感器数据,要实现指定间隔补全、前值填充、保留原始采样的需求,无需逐行循环,用Pandas的矢量化操作就能高效完成,核心思路是合并原始时间戳与目标间隔时间戳,再通过前向填充补全数据。

步骤与代码示例

首先修正原始DataFrame的语法错误(原示例代码存在参数传递问题):

import pandas as pd

# 原始非等距传感器数据
df = pd.DataFrame(
    columns=["Timestamp", "SensorA", "SensorB"],
    data=[
        [pd.Timestamp("2022-10-01 10:30:01.500"), 1.5, 3.5],
        [pd.Timestamp("2022-10-01 10:30:01.800"), 2.0, 3.5],
        [pd.Timestamp("2022-10-01 10:30:01.900"), 2.0, 4.0]
    ]
)

高效重采样实现:

# 1. 将时间列设为索引并排序(确保时间序列有序)
df = df.set_index("Timestamp").sort_index()

# 2. 定义目标重采样间隔(示例为200ms)
resample_freq = "200ms"

# 3. 生成覆盖原始数据时间范围的等间隔时间序列
start = df.index.min()
end = df.index.max()
target_ts = pd.date_range(start=start, end=end, freq=resample_freq)

# 4. 合并原始时间戳与目标间隔时间戳,去重后排序得到完整索引
full_index = df.index.union(target_ts).sort_values()

# 5. 重索引并前向填充,保留原始采样数据
result = df.reindex(full_index).ffill().reset_index(names="Timestamp")

关键逻辑说明

  • 合并索引:通过index.union()同时保留原始采样时间和目标间隔时间,自动去重(避免冲突时重复行),排序后保证时间序列有序。
  • 前向填充:ffill()用最近的前一个有效值填充间隔,完全符合"相邻测量值之间用前一次值填充"的需求。
  • 矢量化操作:所有步骤都是Pandas底层优化的矢量化操作,相比逐行循环,性能提升显著(数据量越大,优势越明显)。

输出验证

运行上述代码后,result的输出与需求完全一致:

Timestamp  SensorA  SensorB
0 2022-10-01 10:30:01.500      1.5      3.5
1 2022-10-01 10:30:01.700      1.5      3.5
2 2022-10-01 10:30:01.800      2.0      3.5
3 2022-10-01 10:30:01.900      2.0      4.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:35:13