2016-04-27 36 views
1

所以我的數據是這樣的:如何計算項目的速度在時間序列中的PostgreSQL與移動時間窗口

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 

這是計算在這些條目被輸入到數據庫的速度。

它看起來像我需要某種滑動擴展窗口,但我不能讓它工作。

如果這可以與一個熊貓DataFrame也可以工作。

df['rate'] = df.groupby(pd.TimeGrouper('1s'))['price'].transform('count') 

回答

0

我不認爲: 我知道我可以秒使用熊貓一個TimeGrouper並計算各組的計數,但我有與指數複製還有其他的問題,這也消除信息組他們你可以有不同行大小的滑動窗口/框架。由第二(而不是前述秒)

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; 

分區將是很容易的,當然,:

這將工作的例子(但很可怕)。

+0

當試圖讓我獲得高價值的方式。我認爲這是因爲它創建了一個交叉連接。在進行解釋分析時,我從每張表格中提取22行,最終刪除208,留下了許多重複的文件。 – Unic0arn

+0

好吧,它使用獨特和子查詢工作,不幸的是我正在處理相當大的數據集,使這些連接非常耗時。 – Unic0arn

+0

噢,當我說這是可怕的時候,我的意思是。出於好奇,爲什麼你需要每個條目的窗口,而不是按秒分組(即在同一秒內兩個條目將具有相同的速率)? – Dmitri

相關問題