2013-12-17 127 views
1

問題:我需要重新計算最後n分鐘的平均值和std dev 每分鐘重新計算mean和std avg(Python,Pandas)

也就是說,如果我們假設n == 3,那麼我有3個數據幀,比如分鐘12:01,12:02,12:03。在12點04分計算平均值,最後3分鐘的標準差。

12:05我需要重新計算12:02,12:03和12:04的數據幀的平均值和標準偏差。

現在我可以通過concat上的最後3個數據幀傳遞一個新的分鐘,然後計算我需要的數據。但這意味着我不必要地重新計算每個數據幀n-1次。

有沒有辦法「暫停」數據框的計算或保存中間結果,添加一個數據幀,然後恢復它? (cpt明顯插件:出於數學原因,我不能只是平均最後的n-1平均值和標準偏差值 - 理論上我可以平均每個df中的樣本數相等的平均值,但它不是)

(很顯然,我沒有立即可用整個過去的數據集 - 每分鐘1新df是輸入和比n分鐘年長從計算「已刪除」)的DF數量

回答

1

你可以計算Mean (M), Second Moment (M2) and Std (D)每個數據幀,當你。需要彙總其中的一些,您可以使用此統計的屬性:

M_I = LEN(X_I)

M(X_I)=總和(X爲X_I X)/ M_I

M2(X_I)=總和(X ** 2爲在X_I X)/ M_I

(X1,X2,... Xn)= sum(M(X_i)* m_i)/ sum(m_i)

M2(X1,X2,... Xn)= sum (X1,X2,... Xn)= M2(X1,X2,... Xn)-M(X1,X2,... Xn)** 2(X1,X2,... Xn)

Then Std = sqrt(D)

其中M_I - X_I樣品中的意見數量

更多信息,請參閱wiki

0

你可以這樣做:

rolling = numpy.zeros(n) 
for i, minute_df in enumerate(new_df): 
    rolling[i % n] = minute_df.mean() 
    print rolling.mean()