Эффективное и элегантное объединение данных временных рядов в кучу - PullRequest
0 голосов
/ 08 октября 2019

У меня есть два (или более, но двух, чтобы решить основную проблему) временных рядов в виде списка пар (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

В моей конкретной среде два временных ряда представляют собой двумерные массивы, где в одном ряду содержатся значения времени, а во втором - значения. Также можно предположить, что все серии начинаются одновременно (например, 0), поэтому они всегда выравниваются в начале.

Это, конечно, можно решить «вручную» с помощью цикла с «указателями»на текущую позицию в серии и перемещения указателей. Тем не менее, есть ли простой и элегантный способ сделать это в numpy?

1 Ответ

1 голос
/ 08 октября 2019

Вы хотите 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...