我有一个非常大的系列索引时间戳。我想计算给定时间段的(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]
答案 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