2016-08-19 11 views
3

は、私は別のデータフレームに変換する方法を "バッファ" ただ一つの列のデータフレームを考える(サイズ2)、以下に説明する:ローリングウィンドウでデータフレームから「バッファ」行列を作成しますか?

DF =

0 
0 1 
1 2 
2 3 
3 4 
4 4 
5 5 
6 5 

expected_buffer =

0 1 
0 1 2 
1 2 3 
2 3 4 
3 4 5 

これは私の試みです:番目を返し

​​

次のようになります。

0 
0 1 
1 2 
2 3 
3 4 
4 4 
5 5 
6 5 

期待するバフ出力を得るにはどうすればよいですか?

編集: pastバッファサイズを意味します。 MATLABの表記を使用する:pastが2である場合、私は5要素の列ベクトルを持っている

df = [1;2;3;4;5] 

することは、私は次の出力を取得して終了する必要があります

buff = [1 2; 2 3; 3 4; 4 5] 

pastが3である場合、予想される出力は

する必要があります
buff = [1 2 3; 2 3 4; 3 4 5] 

pastが4の場合、予想される出力は

です。
buff = [1 2 3 4; 2 3 4 5] 

のでn -element dfpast=mのために、私はサイズ(n-past+1) X pastの行列になるだろう。

+1

私はあなたが望むものを理解し、トラブルを抱えています。あなたの言いたいことは、あなたの 'バッファ'が何を想定しているのかを記述できますか? –

+0

'rr = pd.Series([0,1,2,3,4,4,5,5]); pd.DataFrame(data = {'A':rr、 'B':rr.shift(-1).dropna()}) '? – Abdou

+0

バッファの開始位置を知るにはどうすればよいですか? – Merlin

答えて

3
def buff(df, past): 
    a = np.concatenate([df.values[i:i-past] for i in range(past)], axis=1) 
    return pd.DataFrame(a, columns=list(range(past))) 

buff(df, 2) 

enter image description here

buff(df, 3) 

enter image description here

buff(df, 4) 

enter image description here

buff(df, 5) 

enter image description here

3
import pandas as pd 

def buff(s, n): 
    return (pd.concat([s.shift(-i) for i in range(n)], axis=1) 
       .dropna().astype(int)) 

s = pd.Series([1,2,3,4,5]) 
print(buff(s, 2)) 

# 0 0 
# 0 1 2 
# 1 2 3 
# 2 3 4 
# 3 4 5 

print(buff(s, 3)) 

# 0 0 0 
# 0 1 2 3 
# 1 2 3 4 
# 2 3 4 5 

print(buff(s, 4)) 

# 0 0 0 0 
# 0 1 2 3 4 
# 1 2 3 4 5 
関連する問題