Pandas Datafram上的滑动窗口

2024-05-19 08:37:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个时间序列数据的大熊猫数据框架。

我现在操作这个数据框来创建一个新的更小的数据框,它平均每10行滚动一次。i、 滚动窗口技术。像这样:

def create_new_df(df):
    features = []
    x = df['X'].astype(float)
    i = x.index.values
    time_sequence = [i] * 10
    idx = np.array(time_sequence).T.flatten()[:len(x)]
    x = x.groupby(idx).mean()
    x.name = 'X'
    features.append(x)
    new_df = pd.concat(features, axis=1)
    return new_df

测试代码:

columns = ['X']
df_ = pd.DataFrame(columns=columns)
df_ = df_.fillna(0) # with 0s rather than NaNs
data = np.array([np.arange(20)]*1).T
df = pd.DataFrame(data, columns=columns)

test = create_new_df(df)
print test

输出:

      X
0   4.5
1  14.5

但是,我希望函数使用一个50%重叠的滑动窗口来生成新的数据帧

所以输出如下:

      X
0   4.5
1   9.5
2  14.5

我该怎么做?

我试过的是:

from itertools import tee, izip

def window(iterable, size):
    iters = tee(iterable, size)
    for i in xrange(1, size):
        for each in iters[i:]:
            next(each, None)
    return izip(*iters)

for each in window(df, 20):
    print list(each) # doesn't have the desired sliding window effect

有些人可能还建议使用pandasrolling_mean()方法,但如果是,我看不到如何在窗口重叠的情况下使用此函数。

任何帮助都将不胜感激。


Tags: columns数据indfnewforsizedef
1条回答
网友
1楼 · 发布于 2024-05-19 08:37:12

我认为熊猫滚球技术在这里很好。请注意,从pandas的0.18.0版开始,您将使用rolling().mean(),而不是rolling_mean()

>>> df=pd.DataFrame({ 'x':range(30) })
>>> df = df.rolling(10).mean()           # version 0.18.0 syntax
>>> df[4::5]                             # take every 5th row

       x
4    NaN
9    4.5
14   9.5
19  14.5
24  19.5
29  24.5

相关问题 更多 >

    热门问题