【问题标题】:Rolling window Pandas滚动窗口熊猫
【发布时间】:2017-03-30 20:18:46
【问题描述】:

我需要根据我的时间序列创建一个数据集,其中包含由滚动重叠窗口制成的样本。也就是说,用一定的窗口大小和一定的步长分割我的数据框。

如何使用 Pandas 做到这一点?我看到有一个滚动窗口,但它用于对窗口中的值执行一些聚合(例如计算滚动平均值)。我只对隔离这些重叠的窗口感兴趣。怎么做?

所以输出将是这样的数据帧:

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)?
  • @JulienMarrec 添加了一个示例。
  • 在窗口大小为 3 和步骤 2 的情况下,不应该是 1,2,3 然后是 2,3,4 吗?
  • @JulienMarrec 不,如果步长是 1 就是这种情况。
  • 仅供参考,这里有一个未解决的问题来实现具有一定步长的滚动窗口github.com/pandas-dev/pandas/issues/15354

标签: python pandas


【解决方案1】:

我认为没有任何 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]

【讨论】:

    猜你喜欢
    • 2020-04-21
    • 2021-03-30
    • 1970-01-01
    • 2018-07-10
    • 2021-04-06
    • 2016-11-19
    • 2016-09-10
    • 2020-03-26
    • 2019-10-21
    相关资源
    最近更新 更多