pandas 滚动平均值不适用于我的时间数据系列

pandas rolling mean didn't work for my time data series

我正在编写时间序列的移动平均函数:

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)只是return原来的datedat1。它移动平均没有!怎么了?

您构建的 DataFrame 没有索引(默认为整数),并且有一列时间戳和一列浮点数。

我想你想使用时间戳作为索引,但即使没有,你也需要为了在框架上使用 .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))

如果您不这样做,并且很高兴数据框未编入索引,则可以通过临时将索引设置为时间戳列来解决滚动问题

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 会更好(考虑一下如果日期时间未排序并且您在数据帧上调用滚动会发生什么?)