我有一个大型的时间序列数据的pandas数据框。
我目前通过操作该数据框来创建一个新的、较小的数据框,该数据框是每10行的滚动平均值。即滚动窗口技术。就像这样:
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
有些人可能会建议使用pandas的rolling_mean()方法,但是如果这样做,我无法看到如何使用该函数进行窗口重叠。
如果有任何帮助,将不胜感激。
df[4::5]
- 太棒了! - MaxU - stand with Ukraine