通过Python Dataframe滚动窗口

时间:2017-02-08 10:33:35

标签: python pandas dataframe

我有一个非常大的系列索引时间戳。我想计算给定时间段的(last_value - first_value)。

例如:

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秒的时间窗口时,它应该返回:

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

这用于计算给定时间范围内的利润系列(前向收益)给定价格在各个点[时间段不会连续]。此外,由于数据帧非常大,我希望在更短的时间内完成(循环消耗大量时间)。

编辑:利润系列改为向前看,而不是向后看。

附加测试用例(2秒窗口):

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

利润系列:

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]

1 个答案:

答案 0 :(得分: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