Py学习  »  Python

用python实现时间序列数据的智能平均

npross • 6 年前 • 484 次点击  

我有以下(时间序列)数据:

t = [5.13,   5.27,   5.40,   5.46,  190.99, 191.13, 191.267, 368.70, 368.83,  368.90, 368.93]
y = [17.17, 17.18, 17.014, 17.104,  16.981,  16.96,   16.85,  17.27, 17.66,   17.76, 18.01]

因此,以短(时间)间隔排列的数据组,然后以长时间间隔清晰地分开。

我正在寻找一种简单的方法,它可以智能地将这些数据平均起来;有点像“贝叶斯块”,但用于非柱状图数据。

一个人可以做一个简单的移动平均,或是无意义的卷积,但我正在寻找一个更聪明的方法,可以推广到更大、相似但不完全相同的数据集。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38155
 
484 次点击  
文章 [ 1 ]  |  最新文章 6 年前
John Zwinck
Reply   •   1 楼
John Zwinck    6 年前

熊猫很容易相处。首先,构建一个数据帧:

df = pd.DataFrame({'t':t,'y':y})

然后根据时间阈值标记组:

groups = (df.t.diff() > 10).cumsum()

这给了你 [0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2] ,因为 cumsum() 在布尔数组中,只要输入为真,就递增。

最后,使用 groupby() :

df.groupby(groups).mean()

它给你:

         t          y
t                    
0    5.315  17.117000
1  191.129  16.930333
2  368.840  17.675000

如果你在结尾处需要普通的麻木数组,只需加上 .t.values .y.values .

如果您不知道使用什么时间阈值,我相信您可以想出一些启发式的方法,可能涉及到 df.t df.t.diff() .