Pandas 什么';在时间序列数据中生成滚动窗口嵌入的最快方法是什么?
我感兴趣的是将一个典型的时间序列数据集(一维)转换成一个由原始数据集的每个可能的顺序组合组成的矩阵。我的步幅总是1(将来可能会改变),窗口大小应该根据偏好而改变,鼓励重叠,我的重点是日内数据,这意味着组合只能来自同一天,一次一天 这是一个示例数据集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
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”@civyslide\u window\u view
是在numpy版本1.20
中添加的。如果您的系统上安装了numpy版本<1.20
,我已经提供了另一种解决方案