2013-12-17 124 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()