首页 > 解决方案 > Pandas 函数返回窗口长度的所有子序列

问题描述

我知道 pandas 具有df.rolling()可以对子系列的移动窗口进行操作的功能。但是,是否有一个函数可以简单地返回子系列而不是窗口对象df.rolling()

例如,[1,2,3,4,5,6,7,8,9]窗口长度为 3 的系列将具有 subseries {[1,2,3], [2,3,4], [3,4,5], [4,5,6], [5,6,7], [6,7,8], [7,8,9]}

我可以用 N = 系列长度和 m = 窗口长度做一个 for 循环,

vectors = np.zeros((N-m+1, m))
for i in range(N-m+1):
            vectors[i] = ts[i:i+m]

但与内置函数相比,它会显着增加运行时间。

标签: pythonpandas

解决方案


我将在此处的答案中写下 Nk03 的评论,以便更明显。

新的numpy版本1.20.0有一个功能,我可以用

np.lib.stride_tricks.sliding_window_view(ts, window_shape=m)

API 页面在这里:https ://numpy.org/devdocs/reference/generated/numpy.lib.stride_tricks.sliding_window_view.html

请注意,版本 <1.20.0 没有此功能。


推荐阅读