使用python智能平均时间序列数据

时间:2018-09-29 09:05:47

标签: python numpy time-series astropy

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

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]

因此,短时间间隔内的数据组然后以很长的时间间隔干净地分开。

我正在寻找一种简单的方法来智能地将它们平均在一起;一种“贝叶斯块”,但用于非直方图数据。

一个人可以做一个简单的移动平均数或numpy卷积,但我正在寻找一种更智能的方法,可以推广到更大,相似但不相同的数据集。

1 个答案:

答案 0 :(得分:0)

使用熊猫很容易。首先,构造一个DataFrame:

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

如果最后需要简单的NumPy数组,只需按.t.values.y.values

如果您不知道先验使用什么时间阈值,那么我敢肯定您可以提出一些启发式方法,也许可以对df.tdf.t.diff()进行简单的统计。