2017-07-31 1 views
0

イムは、私が持っているもの、パンダで複数の列の上に窓を転がすオーバー打たです:ローリングは

df = pd.DataFrame({'A':[1,2,3,4],'B':[5,6,7,8]}) 
def test(ts): 
    print(ts.shape) 
df.rolling(2).apply(test) 

しかし問題はts.shapeプリント(2,)と私は印刷にそれを望んでいたということです(2,2)です。これには、行と列の両方のウィンドウ全体が含まれます。

パンダを使った後のローリングの仕組みと結果をどうやって得ることができるのか、私の直感は何が間違っていますか?

+0

を列が終了すると、2番目の列に移動します。テスト関数から浮動小数点値を返し、その形状の代わりに 'ts'を出力することでわかります。 – ayhan

+0

はい、どうやってパンダを使いたいのですか? – user3139545

+0

さて、あなたはベクトル化されないようにカスタム関数を使用しています。なぜループを使用しないのですか? – ayhan

答えて

0

あなたは少しハックを使用することができます - select_dtypesによって数値列の長さを取得し、このスカラー値を使用します。それは、最初の列で始まる最初の2つの観測を取り、その後、次の2とするとき最初

df = pd.DataFrame({'A':[1,2,3,4],'B':[5,6,7,8], 'C':list('abcd')}) 
print (df) 
    A B C 
0 1 5 a 
1 2 6 b 
2 3 7 c 
3 4 8 d 

cols = len(df.select_dtypes(include=[np.number]).columns) 
print (cols) 
2 

def test(ts): 
    print(tuple((ts.shape[0], cols))) 
    return ts.sum() 

(2, 2) 
(2, 2) 
(2, 2) 
(2, 2) 
(2, 2) 
(2, 2) 

df = df.rolling(2).apply(test) 
関連する問題