我正在尝试了解滚动统计信息。我创建了一个数据框:
d = date_range('1/1/2011', periods=72, freq='H')
s = Series(randn(len(rng)), index=rng)
as:
import numpy as np
from numpy.random import randn
import time
r = date_range('1/1/2011', periods=72, freq='H')
r
len(r)
[r[i] for i in range(len(r))]
s = Series(randn(len(r)), index=r)
s
s.plot()
df_new = DataFrame(data = s, columns=['Random Number Generated'])
df_new.diff().hist()
现在,我试图在DataFrame的新列中查找过去3小时内该系列的滚动平均值。我试图先找到滚动的意思:
df_new['mean'] = rolling_mean(df_new, window=3)
我说错了吗?但结果并不像是卑鄙的。有人可以解释一下这个。
答案 0 :(得分:1)
我重新运行了您的代码,但未发现任何问题。它似乎工作。
如果您想在过去3小时内采用滚动均值,rolling_mean(df_new, window=5)
应为rolling_mean(df_new, window=3)
以下是我的验证代码。
import numpy as np
window = 3
mean_list = []
val_list = []
for i, val in enumerate(s):
val_list.append(val)
if i < window - 1:
mean_list.append(np.nan)
else:
mean_list.append(np.mean(np.array(val_list)))
val_list.pop(0)
df_new['mean2'] = mean_list
print(df_new)
输出:
Random Number Generated mean mean2
2011-01-01 00:00:00 1.457483 NaN NaN
2011-01-01 01:00:00 0.009979 NaN NaN
2011-01-01 02:00:00 0.581128 0.682864 0.682864
2011-01-01 03:00:00 1.905528 0.832212 0.832212
2011-01-01 04:00:00 2.221040 1.569232 1.569232
2011-01-01 05:00:00 0.696211 1.607593 1.607593
2011-01-01 06:00:00 -0.854759 0.687497 0.687497
2011-01-01 07:00:00 -0.033226 -0.063925 -0.063925
2011-01-01 08:00:00 0.097187 -0.263599 -0.263599
2011-01-01 09:00:00 -1.579210 -0.505083 -0.505083
...
rolling_mean
的结果与手动计算的滚动平均值一致。
确认有效性的另一种方法是查看计算的滚动平均值的图。 pandas.DataFrame准备plot
方法来轻松绘制图形。
from matplotlib import pyplot
df_new.plot()
pyplot.show()
答案 1 :(得分:1)