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

如何无需展开时序数据,基于其他列的时间范围过滤time-series?

无需展开时序数据,按指定时间范围过滤时序序列的方法

当然存在这类方法,不用展开时序数据,直接通过数组/序列的索引定位与切片操作,就能依据startTime和endTime列的时间范围过滤对应的时序序列。

原始数据

timeSeriesValueSeriesstartTimeendTime
[t1, t2, t3, t4][1, 2, 3, 4 ]t1t3
[t1, t2, t3, t4][6, 7, 8, 9 ]t2t4

预期结果

timeSeriesValueSeriesstartTimeendTime
[t1, t2, t3][1, 2, 3]t1t3
[t2, t3, t4][7, 8, 9]t2t4

具体实现方案

1. Python(Pandas)

通过apply遍历每行,定位起止时间点在时序数组中的索引,再对数组切片:

import pandas as pd

# 构造数据集
df = pd.DataFrame({
    'timeSeries': [['t1','t2','t3','t4'], ['t1','t2','t3','t4']],
    'ValueSeries': [[1,2,3,4], [6,7,8,9]],
    'startTime': ['t1', 't2'],
    'endTime': ['t3', 't4']
})

# 定义过滤逻辑
def filter_ts(row):
    start_idx = row['timeSeries'].index(row['startTime'])
    end_idx = row['timeSeries'].index(row['endTime']) + 1  # 切片左闭右开,需+1包含endTime对应元素
    row['timeSeries'] = row['timeSeries'][start_idx:end_idx]
    row['ValueSeries'] = row['ValueSeries'][start_idx:end_idx]
    return row

# 应用过滤
df = df.apply(filter_ts, axis=1)

2. SQL(PostgreSQL为例)

利用PostgreSQL的数组内置函数,定位索引后直接切片:

SELECT
    array_slice(timeSeries, array_position(timeSeries, startTime), 
                array_position(timeSeries, endTime) - array_position(timeSeries, startTime) + 1) AS timeSeries,
    array_slice(ValueSeries, array_position(timeSeries, startTime), 
                array_position(timeSeries, endTime) - array_position(timeSeries, startTime) + 1) AS ValueSeries,
    startTime,
    endTime
FROM your_table;

核心思路是:找到时间范围端点在时序数组中的位置索引,直接对数组进行区间截取,全程无需将时序数据展开为多行,处理效率更高,尤其适合大规模时序数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:40:37