2017-12-30 20 views
1

ローリングウインドウで最新の値をとり、そのウインドウ内のすべての数値の平均で割ることを考えています。Python Pandas:カスタムローリングウインドウ計算

私が試したもの:

df.a.rolling(window=7).mean()/df.a[-1] 

df.a[-1]は常にデータセット全体の中で最も最近のものであるので、これは動作しません。私は窓の最後の値が必要です。

私は今日大量の検索をしました。私は間違った言葉を探しているかもしれませんし、結果を理解していないかもしれません。なぜなら何か役に立つものがないからです。

任意のポインタをいただければ幸いです。

答えて

2

ローリングウィンドウでの集約(mean()を使用)は、元の列と同じインデックスを持つpandasシリーズオブジェクトを返します。単純にローリングウィンドウを集計し、元の列を集計値で除算することができます。

import numpy as np 
import pandas as pd 

df = pd.DataFrame(np.arange(30), columns=['A']) 

df 
# returns: 
    A 
0 0 
1 1 
2 2 
... 
27 27 
28 28 
29 29 

ローリング平均を使用して、同じインデックスのシリーズを得ることができます。

df.A.rolling(window=7).mean() 
# returns: 
0  NaN 
1  NaN 
2  NaN 
3  NaN 
4  NaN 
5  NaN 
6  3.0 
7  4.0 
... 
26 23.0 
27 24.0 
28 25.0 
29 26.0 

それがインデックス化されているので、あなたが望む結果をdf.Aすることにより、簡単な除算を取得することができます。

df.A.rolling(window=7).mean()/df.A 
# returns: 
0   NaN 
1   NaN 
2   NaN 
3   NaN 
4   NaN 
5   NaN 
6  0.500000 
7  0.571429 
8  0.625000 
9  0.666667 
10 0.700000 
11 0.727273 
12 0.750000 
13 0.769231 
14 0.785714 
15 0.800000 
16 0.812500 
17 0.823529 
18 0.833333 
19 0.842105 
20 0.850000 
21 0.857143 
22 0.863636 
23 0.869565 
24 0.875000 
25 0.880000 
26 0.884615 
27 0.888889 
28 0.892857 
29 0.896552 
+0

詳細な説明をありがとうございます。これは機能するだけでなく、パンダを正しく使用する方法を理解するのに役立ちました。それは今、完全に意味をなさない。このような問題を多少処理する他の言語から来て、私はそれを前もって理解することができませんでした。 – Tony