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

如何对含时间戳的Python二维坐标列表按时间间隔下采样

实现方案

前提说明

你的原始列表如果已经按X轴时间戳升序排列(绝大多数图表时序数据默认都是采集顺序排列),可以直接用O(n)时间复杂度的单次遍历方案完成降采样,不需要额外排序开销。

纯Python原生实现(零依赖、10万条以内数据最优)

核心逻辑是将时间戳按指定间隔取整得到所属区间,同一个区间只保留第一条记录:

# 示例输入
list1 = [[12345678, 12345678], [12345679, 12345679], [12346000, 12346000]]
# 配置间隔,此处为5分钟,转换为秒
interval = 5 * 60

last_interval = None
filtered_list = []
# 若原始列表未排序,先执行排序:list1.sort(key=lambda x: x[0])
for point in list1:
    ts = point[0]
    # 计算当前点所属的时间区间起始值
    current_interval = ts // interval * interval
    # 遇到新的区间就保留该点
    if current_interval != last_interval:
        filtered_list.append(point)
        last_interval = current_interval

该方案仅需要遍历列表一次,额外空间仅用于存储结果,是无第三方依赖场景下的最高效实现。

Pandas实现(10万条以上大数据量最优)

数据量较大时,pandas的向量化操作比原生Python循环效率高3~10倍:

import pandas as pd

list1 = [[12345678, 12345678], [12345679, 12345679], [12346000, 12346000]]
interval_seconds = 5 * 60

df = pd.DataFrame(list1, columns=["ts", "y"])
# 生成时间区间列,去重保留每个区间第一条记录
df["interval"] = df["ts"] // interval_seconds * interval_seconds
res_df = df.drop_duplicates(subset="interval", keep="first")
# 转换回二维列表格式
filtered_list = res_df[["ts", "y"]].values.tolist()

可选调整

如果需要保留每个区间的最后一条数据、或者区间内Y值的平均值/最大值等,只需要修改上述代码中区间取值的逻辑即可,核心的按间隔分桶逻辑不需要改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:33:00