2016-12-02 50 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並將它提升到range range數組的power。此範圍數組將模擬"for i in range(1, first.shape[0]):"中的迭代器i

因此,量化的方法是 -

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 ** first)'。如果無法保證矢量的長度增加1,請相應地編輯問題。 – Divakar

+0

這只是恰好增加1的示例數據。爲了概括您的答案,沒有必要編輯問題。 – MERose