重新计算平均值和标准平均值(Python,Pandas)

时间:2013-12-17 12:44:26

标签: python pandas

问题:我需要在最后n分钟每分钟重新计算平均值和标准值。

也就是说,如果我们假设n == 3,那么我有3个数据帧,分别为12:01,12:02,12:03。在12:04计算最后3分钟的平均值,std dev。

在12:05我需要重新计算12:02,12:03,12:04的数据帧的平均值和标准值。

现在,我可以concat新一分钟后的最后3个数据帧,然后计算我需要的内容。但这意味着我不必要地重新计算每个数据帧n-1次。

有没有办法在数据帧上“暂停”计算或保存中间结果,添加数据帧然后恢复它? (cpt明显的插件:出于数学原因,我不能平均最后的n-1平均值和标准值 - 理论上我可以平均每个df中的样本数量相等的平均数,但事实并非如此)< / p>

(显然,我没有同时提供整个过去的数据集 - 每分钟有1个新的df传入,而且n分钟之前的df数字从计算中被“删除”。)

2 个答案:

答案 0 :(得分:1)

您可以为每个数据框计算Mean (M), Second Moment (M2) and Std (D),当您需要聚合其中一些时,您可以使用此统计信息的属性:

  

m_i = len(X_i)

     

M(X_i)= sum(x在X_i中的x)/ m_i

     

M2(X_i)= sum(X_i中x为x ** 2)/ m_i

     

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

     

M2(X1,X2,... Xn)=总和(M2(X_i)* m_i)/ sum(m_i)

     

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

     

然后Std = sqrt(D)

     

其中m_i - X_i样本中的观察数

有关详细信息,请参阅wiki

答案 1 :(得分:0)

您可以执行以下操作:

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