我有一个时间序列数据的大熊猫数据框架。
我现在操作这个数据框来创建一个新的更小的数据框,它平均每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()方法,但如果是,我看不到如何在窗口重叠的情况下使用此函数。
任何帮助都将不胜感激。
我认为熊猫滚球技术在这里很好。请注意,从pandas的0.18.0版开始,您将使用
rolling().mean()
,而不是rolling_mean()
。相关问题 更多 >
编程相关推荐