问题:我需要在最后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数字从计算中被“删除”。)
答案 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()