Pandas 什么';在时间序列数据中生成滚动窗口嵌入的最快方法是什么?

Pandas 什么';在时间序列数据中生成滚动窗口嵌入的最快方法是什么?,pandas,datetime,time-series,Pandas,Datetime,Time Series,我感兴趣的是将一个典型的时间序列数据集(一维)转换成一个由原始数据集的每个可能的顺序组合组成的矩阵。我的步幅总是1(将来可能会改变),窗口大小应该根据偏好而改变,鼓励重叠,我的重点是日内数据,这意味着组合只能来自同一天,一次一天 这是一个示例数据集 import pandas as pd date_1 = pd.date_range('2015-02-24', periods=5, freq='1T') date_2 = pd.date_range('2015-02-25', periods=5

我感兴趣的是将一个典型的时间序列数据集(一维)转换成一个由原始数据集的每个可能的顺序组合组成的矩阵。我的步幅总是1(将来可能会改变),窗口大小应该根据偏好而改变,鼓励重叠,我的重点是日内数据,这意味着组合只能来自同一天,一次一天

这是一个示例数据集

import pandas as pd
date_1 = pd.date_range('2015-02-24', periods=5, freq='1T')
date_2 = pd.date_range('2015-02-25', periods=5, freq='1T')
date = date_1.union(date_2)
values = range(len(date))

df = pd.DataFrame({'date': date, 'values': values})
如果窗口大小为3,您知道有什么快速的、最好是python式的方法可以得到以下输出吗

0 1 2
1 2 3
2 3 4
5 6 7
6 7 8
7 8 9

我把
group\u by
搞得一团糟,但没能得出演示的结果。

date
将列
分组,然后在列表中遍历每个组并应用
滑动窗口视图
转换,然后垂直堆叠每个组对应的所有滑动视图

对于numpy版本>=
1.20

from numpy.lib.stride_tricks import sliding_window_view

grp = df['values'].groupby(df['date'].dt.floor('D'))
np.vstack([sliding_window_view(v, 3) for _, v in grp])
def sliding_view(a, w):
    s = a.strides[0]
    shape = a.shape[0] - w + 1, w
    return np.lib.stride_tricks.as_strided(a, shape, (s, s))


grp = df['values'].groupby(df['date'].dt.floor('D'))
np.vstack([sliding_view(v.values, 3) for _, v in grp])
对于numpy版本1.20

from numpy.lib.stride_tricks import sliding_window_view

grp = df['values'].groupby(df['date'].dt.floor('D'))
np.vstack([sliding_window_view(v, 3) for _, v in grp])
def sliding_view(a, w):
    s = a.strides[0]
    shape = a.shape[0] - w + 1, w
    return np.lib.stride_tricks.as_strided(a, shape, (s, s))


grp = df['values'].groupby(df['date'].dt.floor('D'))
np.vstack([sliding_view(v.values, 3) for _, v in grp])


感谢您的快速响应,如何在每个循环中测量时间?@civy您可以在代码块上运行
timeit
分析。奇怪的是,我越来越担心:无法从“numpy.lib.stride\u tricks”导入名称“slide\u window\u view”@civy
slide\u window\u view
是在numpy版本
1.20
中添加的。如果您的系统上安装了numpy版本<
1.20
,我已经提供了另一种解决方案