熊猫时间序列操作

时间:2013-03-28 19:52:47

标签: python scipy pandas time-series

我是熊猫的新手。我有时间序列数据。我怎样才能轻松完成以下操作?

我有一个叫做输入的二维矩阵。每行有5个元素。有很多行(数千)

input[t,:] = [f1, f2, f3, f4, f5]

(1)我需要计算样本之间的相对差异。

即。 rel[t,:] = ( input[t,:]-input[t-1,:] ) / input[t-1,:]

(2)我需要创建一个大小为80的滑动窗口。

即。 win[t,:] = [rel[t,:],rel[t-1,:],...,rel[t-79,:]]

我怎么能在Pandas或任何其他框架中执行此操作,例如scikit.timeseries。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

你可以在朴素的numpy中做到这两点,虽然pandas可能会有特定的功能,使它更容易。但是:

rel = np.diff(input) / input[:-1]

from numpy.lib.stride_tricks import as_strided
win = as_strided(rel, shape=(rel.shape[0]-79, 80), strides=rel.strides*2)

会这样做。


如果输入有多行,您仍然可以执行以下操作:

rel = np.diff(input, axis=1) / input[:, :-1]
win = as_strided(rel, shape=(rel.shape[0], rel.shape[1]-79, 80),
                 strides=rel.strides + rel.strides[1:])

虽然您可能想要使用'shape'并匹配strides来获得您所追求的确切窗口形状。