我是熊猫新手。我有一个时间序列数据。如何轻松进行以下操作?

我有一个称为输入的二维矩阵。每行有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)中做到这一点。

最佳答案

尽管熊猫可能具有使它变得更容易的特定功能,但它们都可以以简单的numpy方式进行。但:

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以获得所需的确切窗口形状。

关于python - Pandas 时间序列运算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15690925/

10-12 21:59