我是熊猫新手。我有一个时间序列数据。如何轻松进行以下操作?
我有一个称为输入的二维矩阵。每行有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/