2017-03-13 162 views
0

我使用熊猫来处理一些时间序列数据。我有以下格式的数据帧:熊猫数据帧时间序列上的滚动平均值

   Date  Time Reading 
552726 2016/08/01 0: 0: 0 17.28 
552727 2016/08/01 0: 0: 5 17.28 
552728 2016/08/01 0: 0:10 17.21 
552729 2016/08/01 0: 0:15 17.16 
552730 2016/08/01 0: 0:20 17.11 
552731 2016/08/01 0: 0:25 17.08 
552732 2016/08/01 0: 0:30 17.18 
552733 2016/08/01 0: 0:35 17.18 
etc... 

我要平均阅读列,因此,它需要一个10分钟的窗口,并计算平均,我想整个时间序列移动该窗口。然后我想将数据帧与新的平均值进行更新,并且还时间戳,所以它看起来像这样:

  Date  Time  Reading 
552726 2016/08/01 0: 0: 0 17.30 
552727 2016/08/01 0: 10:0 17.35 
552728 2016/08/01 0: 20:0 17.20 
etc... 

什么是熊猫要做到这一点的最好方法是什么?我尝试使用滚动平均法设置滚动窗口的频率。但是,我必须重新构建数据框架,并自己添加新的时间戳,我认为这有一个更简单,更简单的方法。

谢谢,请让我知道我是否可以更好地澄清事情。

+1

你每5秒钟总是有一次观察吗? – FLab

+0

是的。采样率是1个样本/ 5秒 – entropy4money

+0

那么为什么不使用120个观测滚动窗口? – FLab

回答

1

给出你的数据,假设我想计算15秒间隔的平均值。 我压根儿:

#frame contains your data 
n_obs = 3 
result = frame.rolling(window = n_obs, min_periods = 1).mean().iloc[::n_obs,:] 

#   Date  Time Reading 
# 0 2016/08/01 0: 0: 0 17.280000 
# 3 2016/08/01 0: 0:15 17.216667 
# 6 2016/08/01 0: 0:30 17.123333 

其中主要的“绝招”是选择n_obs的意见多。

这应该适用于你使用n_obs = 120,尽管它意味着计算比你实际需要更多的平均值。

+0

很高兴帮助。 还要考虑upvoting如果你找到了答案有用) 一个问题,我发现是时间与具有1个或2 digits.This小时和分钟,表现形式为转换成datetime问题...... 应该说是有益的,我做了这个“杂乱”的线,以一个很好的格式获得时间(如列表中的例子,但你可以很容易地转换成熊猫系列)。您可以使用它来了解每个步骤 time = frame.Time.values.tolist() time = map(lambda x:“:”。join(x),[map(lambda x:“{0:0 > 2}“。format(x),el.split(”:“))for el in map(lambda x:x.replace(”“,”“),time)]) – FLab

+0

谢谢。我是熊猫新手。这就是我正在做的,但我仍然在使用iloc方法进行索引。 – entropy4money