1

我是熊猫新手。我有一个时间序列数据。我怎样才能轻松地进行以下操作?

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

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

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

IErel[t,:] = ( input[t,:]-input[t-1,:] ) / input[t-1,:]

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

IEwin[t,:] = [rel[t,:],rel[t-1,:],...,rel[t-79,:]]

我怎么能在 Pandas 或任何其他框架(例如 scikit.timeseries)中做到这一点。

4

2 回答 2

2

这些文档对这些类型的操作非常全面

看:

1) http://pandas.pydata.org/pandas-docs/dev/timeseries.html#time-series-related-instance-methods

2) http://pandas.pydata.org/pandas-docs/dev/computation.html#expanding-window-moment-functions

于 2013-03-28T20:16:06.800 回答
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:])

尽管您可能想玩弄“形状”并进行匹配strides以获得您所追求的确切窗口形状。

于 2013-03-28T20:19:15.190 回答