我有以下(时间序列)数据:
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卷积,但我正在寻找一种更智能的方法,可以推广到更大,相似但不相同的数据集。
答案 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.t
和df.t.diff()
进行简单的统计。