我在时间序列上写了一个移动平均函数:
def datedat_moving_mean(datedat,window):
#window is the average length
datedatF = pandas.DataFrame(datedat)
return (datedatF.rolling(window).mean()).values
上面的代码是从Moving Average- Pandas
复制的我将此功能应用于此时间序列:
datedat1 = numpy.array(
[ pandas.date_range(start=datetime.datetime(2015, 1, 30),periods=17),
numpy.random.rand(17)]).T
但是,datedat_moving_mean(datedat1,4)
只返回原始datedat1
。它平均没有移动!怎么了?
答案 0 :(得分:1)
您构建的DataFrame没有索引(默认为整数),并且有一列Timestamp和一列浮点数。
我想你想使用Timestamps作为索引,但即使不是,你也需要在框架上使用.rolling()。
我建议您初始化原始DataFrame应该更像这样
import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.random.rand(17), index=pd.date_range(start=datetime.datetime(2015, 1, 30),periods=17))
如果不这样做,并且您很乐意将数据框取消索引,则可以通过临时将索引设置为Timestamp列来解决滚动问题
import pandas as pd
import numpy as np
import datetime
datedat1 = np.array([ pd.date_range(start=datetime.datetime(2015, 1, 30),periods=17),np.random.rand(17)]).T
datedatF = pd.DataFrame(datedat1)
# We can temporarily set the index, compute the rolling mean, and then
# return the values of the entire DataFrame
vals = datedatF.set_index(0).rolling(5).mean().reset_index().values
return vals
我建议使用索引创建的DataFrame会更好(考虑在日期时间未排序且您在数据框上调用滚动时会发生什么?)