2017-03-23 18 views
1

私は計算をベクトル化する良い方法を見つけようとしています。Pythonの加重累積合計

| A | B (Calculation)  | B (Value) | 
|---|----------------------|-----------| 
| 1 |      |   | 
| 2 |      |   | 
| 3 |      |   | 
| 4 | =SUM(A1:A4)/4  | 2.5  | 
| 5 | =(1/4)*A5 + (3/4)*B4 | 3.125  | 
| 6 | =(1/4)*A6 + (3/4)*B5 | 3.84375 | 
| 7 | =(1/4)*A7 + (3/4)*B6 | 4.6328125 | 

私は基本的に(TA-Libのを使用せずに)Wilder's Average True Rangeを複製しようとしています。私の単純化された例の場合、列Aはあらかじめ計算された真の範囲です。

Average True Range Equation

ループせずにこれを行う方法の任意のアイデア?方程式を打ち破ると、事実上重み付けされた累積合計です...しかし、それは間違いなく、既存のパンダcumsumが可能にするものではありません。

+1

nは定数ですか?私は 't'と' n'を見る。 't'はインデックスのように見えますが、' n'がどこから来ているのかわかりません。 – user2357112

+1

'n'が定数の場合、これはかなり標準的な指数移動平均であると思われ、グーグルの' numpy指数移動平均 'は直ちにそれを行う方法になります。 – user2357112

+0

EWMを効率的に実装するための[Q&A](http://stackoverflow.com/questions/42869495/numpy-version-of-exponential-weighted-moving-average-equivalent-to-pandasewewm) – Divakar

答えて

3

これは実際にはewmの問題です。問題は、最初の4つの行が1つの行にまとめられているということです。次にが続きます。

a = df.A.values 
d1 = pd.DataFrame(dict(A=np.append(a[:4].mean(), a[4:])), df.index[3:]) 
d1.ewm(adjust=False, alpha=.25).mean() 

      A 
3 2.500000 
4 3.125000 
5 3.843750 
6 4.632812