2017-02-08 7 views
-1

タイムスタンプでインデックス化された非常に大きなシリーズがあります。私は一定の期間(last_value - first_value)を計算したい。例えばPython Dataframeローリングウィンドウの違い

:2秒の時間ウィンドウを与えることで

timstamp    value 
2016-11-08 00:00:00 1 
2016-11-08 00:00:02 3 
2016-11-08 00:00:03 -2 
2016-11-08 00:00:07 6 

、それは返す必要があります:

2 [3 - 1] 
-5 [-2 - 3] 
0 [-2 - -2] 
0 [6 - 6] 

これは、時間枠が与えられている特定の価格のための利益シリーズ(前方リターン)を計算するために使用されますさまざまな時点で[Timestapsは連続しない]。また、データフレームが非常に大きいので、私は短い時間で実行したい(ルーピングは多くの時間を消費する)。

編集:利益のシリーズは、後方に向かって前進するように変更されました。

time      
2011-01-01 00:00:02.000 1 
2011-01-01 00:00:04.000 2 
2011-01-01 00:00:05.000 3 
2011-01-01 00:00:05.500 4 
2011-01-01 00:00:06.000 5 
2011-01-01 00:00:06.500 6 
2011-01-01 00:00:07.000 7 

利益シリーズ:

追加のテストケース(2秒ウィンドウのため)

2011-01-01 00:00:02.000 1 [2-1] 
2011-01-01 00:00:04.000 3 [5-2] 
2011-01-01 00:00:05.000 4 [7-3] 
2011-01-01 00:00:05.500 3 [7-4] 
2011-01-01 00:00:06.000 2 [7-5] 
2011-01-01 00:00:06.500 1 [7-6] 
2011-01-01 00:00:07.000 0 [7-7] 

答えて

2

この

s.rolling('2001ms').apply(lambda x: x[-1] - x[0]).shift(-1).fillna(0) 

timstamp 
2016-11-08 00:00:00 2.0 
2016-11-08 00:00:02 -5.0 
2016-11-08 00:00:03 0.0 
2016-11-08 00:00:07 0.0 
Name: value, dtype: float64 
+0

こんにちはを試してみてください!私は実際に将来の利益を要求し、それに応じて質問を更新しました。 – Rajs123

+0

@ Rajs123更新された投稿を参照してください。 – piRSquared

+0

最後の2秒のウィンドウは必ずしも1つのサイズである必要はありません。多くの行になる可能性があります。 – Rajs123