大熊猫滚动意味着没有为我的时间数据系列工作

时间:2018-01-11 06:16:27

标签: python pandas moving-average

我在时间序列上写了一个移动平均函数:

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。它平均没有移动!怎么了?

1 个答案:

答案 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会更好(考虑在日期时间未排序且您在数据框上调用滚动时会发生什么?