2016-12-02 6 views
0

前の行の値(または時系列の期間)を含む数式を計算したいと思います。パンダの自己回帰式を計算する

具体的には、最初の行を除いて式はx[i] = b * x[i-1]であり、ちょうどbです。 .shift(1)は値を変更しないため、ジョブを実行していません。

ループを使用しましたが、より洗練されたバージョン(つまり、パンダの機能)を探しています。

import numpy as np 
import pandas as pd 

first = pd.Series(np.arange(0.0,13.0)) 
b = 0.5 
second = pd.Series(b) 
for i in range(1, first.shape[0]): 
    second[i] = b*second[i-1] 

second.head() 
#0 0.50000 
#1 0.25000 
#2 0.12500 
#3 0.06250 
#4 0.03125 
#dtype: float64 

PS:この問題については、わかりませんでした。もしそうなら、教えてください。

答えて

3

開始値をbaseとして使用し、それを範囲配列のpowerに上げることができます。この範囲配列は、イテレータi"for i in range(1, first.shape[0]):"にシミュレートします。したがって

、ベクトル化のアプローチは次のようになり -

pd.Series(b**np.arange(1,first.shape[0]+1)) 
+0

が、それはむしろ '' pd.Series(最初のB **)ではないでしょうか?結局のところ、私のベクトルの長さのために数字が「1」だけ増加しているという保証はありません。 – MERose

+0

@MERose質問に投稿されたコードに基づいて、あなたはちょうど形状パラメータを使用して、配列 'second'を' for i in range(1、first.shape [0]): 'で作成しています。したがって、いいえ、 'pd.Series(b **最初)'ではありません。ベクタの長さが1ずつ増加していることが保証されていない場合は、それに応じて質問を編集してください。 – Divakar

+0

これは単なるデータの増加例です。回答を一般化するには、質問を編集する必要はありません。 – MERose

関連する問題