numpy中时间序列数据的高效优雅合并

2024-09-29 01:32:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个(或更多,但两个足以解决核心问题)时间序列,以成对列表的形式(time, value)

Series x
time    0  2  4  5  8  9
value  x0 x2 x4 x5 x8 x9

Series y
time    0  2  3  5  7  8
value  y0 y2 y3 y5 y7 y8

我想从两个原始序列中得到一个元组的时间序列,在时间对齐的地方,使用当时的值,在不对齐的地方,使用上一次可用的值:

time     0  2  3  4  5  7  8  9
x vals  x0 x2 x2 x4 x5 x5 x8 x9
y vals  y0 y2 y3 y3 y5 y7 y8 y8

在我的具体环境中,两个时间序列是二维numpy数组,其中一行保存时间,另一行保存值。也可以假设所有序列在同一时间开始(例如0),因此它们总是在开始时对齐

当然,这可以通过循环“指针”到序列中的当前位置并移动指针来“手动”解决。但是,在numpy中有没有一种简单而优雅的方法呢


Tags: timevalue时间序列seriesx2x4x5
1条回答
网友
1楼 · 发布于 2024-09-29 01:32:38

您确实希望pandas用于此:

df1 = pd.DataFrame({'time':[0,2,4,5,8,9],
                    'value':['x0','x2','x4','x5','x8','x9']})


df2 = pd.DataFrame({'time':[0,2,3,5,7,8],
                    'value':['y0','y2','y3','y5','y7','y8']})

df1.merge(df2, on='time', how='outer').sort_values('time').ffill()

输出:

   time value_x value_y
0     0      x0      y0
1     2      x2      y2
6     3      x2      y3
2     4      x4      y3
3     5      x5      y5
7     7      x5      y7
4     8      x8      y8
5     9      x9      y8

相关问题 更多 >