所以我有这样的数据:
index price
2015-01-08 07:01:18.601318 10
2015-01-08 07:01:19.100645 10
2015-01-08 07:01:19.600494 24
2015-01-08 07:01:20.101432 22
2015-01-08 07:01:20.102579 235
2015-01-08 07:01:20.600370 1050
2015-01-08 07:01:20.603521 100
2015-01-08 07:01:20.800408 50
2015-01-08 07:01:21.100629 10
2015-01-08 07:01:21.601491 12
2015-01-08 07:01:21.601663 97
我想要的是在每个条目后面有一个指定时间长度的移动窗口,比如1秒,并计算该窗口内有多少条目。
结果应该类似于:
index price rate
2015-01-08 07:01:18.601318 10 1
2015-01-08 07:01:19.100645 10 2
2015-01-08 07:01:19.600494 24 3
2015-01-08 07:01:20.101432 22 2
2015-01-08 07:01:20.102579 235 3
2015-01-08 07:01:20.600370 1050 4
2015-01-08 07:01:20.603521 100 4
2015-01-08 07:01:20.800408 50 5
2015-01-08 07:01:21.100629 10 6
2015-01-08 07:01:21.601491 12 4
2015-01-08 07:01:21.601663 97 5
这是计算这些条目输入数据库的速率。
看起来我需要某种滑动扩展窗口,但我无法让它工作。
如果这对于也可以使用的pandas DataFrame是可行的。 我知道我可以使用Pandas中的TimeGrouper将它们分组,然后计算每个组的计数,但我还有其他问题,包括索引重复,这也会删除信息:
df['rate'] = df.groupby(pd.TimeGrouper('1s'))['price'].transform('count')
答案 0 :(得分:0)
我认为你不能拥有不同行尺寸的滑动窗户/框架。
这适用于该示例(但非常可怕):
SELECT t1.index, count(*) AS rate
FROM the_table t1
JOIN the_table t2 ON (t2.index BETWEEN t1.index - interval '1s' AND t1.index)
GROUP BY 1 ORDER BY 1;
当然,按第二个分区(而不是前面的第二个)将非常简单。