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
@マックス私は遠くに行かないだろうが、ありがとう! – JohnE
それは計算力の無駄でしょうか? 64個のサンプルウィンドウに50%のオーバーラップがあるので、基本的には1/32の作業しか使わないとします。怠惰に評価されていない限り、もちろんです。 –