5
我有時間序列數據的大數據幀大熊貓。滑動窗口在熊貓據幀
我目前操縱這個數據幀,以創建一個滾動的每隔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
有的還可能會建議使用熊貓rolling_mean()方法,但即便如此,我不能看到如何使用該功能窗口重疊。
任何幫助將不勝感激。
'df [4 :: 5]' - 那太棒了! – MaxU
@MaxU我不會走那麼遠,但謝謝! – JohnE
這不會浪費計算能力嗎?假設我在64個樣本窗口中有50%的重疊,所以基本上我只使用了1/32的工作。當然,除非它被懶惰地評估過。 –