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

如何将不规则时间序列数据重采样为规则时间序列?

解决时间序列重采样调整间隔的问题

完全可以通过pandas来实现这个时间序列重采样的需求,下面是针对你给出的示例数据的具体实现步骤:

步骤1:准备并加载原始数据

首先我们把你提供的两个数据集转换成pandas能处理的结构,同时将时间戳列解析为datetime类型(这是时间序列处理的关键):

import pandas as pd

# 模拟第一个数据集的数据
data1 = [
    ("2020-01-01-01:00:00.00", 1),
    ("2020-01-01-01:00:00.30", 1),
    ("2020-01-01-01:00:00.60", 1),
    ("2020-01-01-01:00:00.90", 1),
    ("2020-01-01-01:00:01.20", 1),
    ("2020-01-01-01:00:01.50", 1),
    ("2020-01-01-01:00:01.80", 0),
    ("2020-01-01-01:00:02.10", 0),
    ("2020-01-01-01:00:02.40", 0),
    ("2020-01-01-01:00:02.70", 0),
]

# 模拟第二个数据集的数据
data2 = [
    ("2020-01-01-01:00:00.00", 1),
    ("2020-01-01-01:00:00.30", 1),
    ("2020-01-01-01:00:00.60", 0),
    ("2020-01-01-01:00:00.90", 0),
    ("2020-01-01-01:00:01.20", 0),
    ("2020-01-01-01:00:01.50", 0),
    ("2020-01-01-01:00:01.80", 0),
    ("2020-01-01-01:00:02.10", 0),
    ("2020-01-01-01:00:02.40", 0),
    ("2020-01-01-01:00:02.70", 0),
]

# 转换为DataFrame并解析时间戳
df1 = pd.DataFrame(data1, columns=["time stamp", "value1"])
df1["time stamp"] = pd.to_datetime(df1["time stamp"], format="%Y-%m-%d-%H:%M:%S.%f")

df2 = pd.DataFrame(data2, columns=["time stamp", "value2"])
df2["time stamp"] = pd.to_datetime(df2["time stamp"], format="%Y-%m-%d-%H:%M:%S.%f")

步骤2:设置时间索引并重采样

将时间列设置为DataFrame的索引,然后使用resample方法指定目标时间间隔(这里是400毫秒,即"400L"),再用ffill()(向前填充)来获取最近的原始值,这正好匹配你示例中的结果逻辑:

# 设置时间索引
df1 = df1.set_index("time stamp")
df2 = df2.set_index("time stamp")

# 重采样到400毫秒间隔,向前填充值
resampled_df1 = df1.resample("400L").ffill()
resampled_df2 = df2.resample("400L").ffill()

# 合并两个重采样后的数据集
final_df = pd.concat([resampled_df1, resampled_df2], axis=1).reset_index()

步骤3:调整输出格式(可选)

如果需要让时间戳的格式和你示例完全一致,可以格式化时间列:

final_df["time stamp"] = final_df["time stamp"].dt.strftime("%Y-%m-%d-%H:%M:%S.%f").str[:-4]
# 截取到小数点后两位,匹配示例格式

运行完上面的代码后,final_df就是你想要的结果,输出的核心内容和你给出的目标数据集完全一致。

关键说明

  • resample("400L"):L代表毫秒单位,400L对应你需要的0.4秒间隔。如果要调整成其他间隔,比如1秒用"1S"、30秒用"30S"即可,非常灵活。
  • ffill():全称forward fill,用最近的前一个有效值填充新生成的时间点。如果你的业务需要用后续值填充,可以换成bfill();如果需要线性插值补全,用interpolate(method="linear")就行,按需选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:12:39