滚动窗口Pandas

3

我需要从我的时间序列中创建一个数据集,其中的样本是由滚动重叠窗口创建的。也就是说,使用特定的窗口大小和步长拆分数据帧。

如何使用Pandas进行此操作?我知道有一个rolling window,但它是用于在窗口中执行一些聚合(例如计算滚动平均值)。我只关心隔离这些重叠的窗口。怎么做呢?

因此,输出将类似于以下DataFrame:

1, a
2, b
3, c
4, d
5, e
6, f
7, g

对于窗口大小为3,步长为2的情况,输出如下:

1, a
2, b
3, c

3, c
4, d
5, e

5, e
6, f
7, g

清楚地说,我知道如何为此编写函数,只是想检查Pandas中是否已经有可用的东西。


您是否介意包含一个最小化的示例,其中包括所需的输出(请参见mcve)? - Julien Marrec
@JulienMarrec 添加了一个示例。 - Kobe-Wan Kenobi
如果窗口大小为3,步长为2,那么应该是1、2、3,然后是2、3、4,对吧? - Julien Marrec
@JulienMarrec 不,如果步长为1,则会是这种情况。 - Kobe-Wan Kenobi
FYI,这里有一个开放的问题需要实现滚动窗口并设置步长大小 https://github.com/pandas-dev/pandas/issues/15354 - sfdurbano
1个回答

0

我认为没有任何pandas函数可以帮助你。一个简单的实现方法是:

A = pd.DataFrame(index=range(1,10), 
                 data=['a','b','c','d','e','f','g','h','i'], 
                 columns=['letters'])

step = 2 
size = 3
n_examples = len(A)
dataframes = []
k=0

while(k * step + size < n_examples):
    dataframes += [A.loc[k * step:k * step + size]]
    k+=1

print(dataframes)

输出结果为:

[  letters
 1       a
 2       b
 3       c,   letters
 2       b
 3       c
 4       d
 5       e,   letters
 4       d
 5       e
 6       f
 7       g]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接