Как объединить временные ряды по меткам времени Unix - PullRequest
2 голосов
/ 27 сентября 2019

У меня есть два кадра данных, каждый из которых содержит данные временного ряда.Оба имеют два столбца, один - время Unix в мс, а другой - значение.Два кадра данных имеют разные частоты дискретизации.

DATAFRAME1:

    time [s/1000]     DATA1 
0   1558970242000   -0.019531
1   1558970242025   -0.078125
2   1558970242050   -0.058594
3   1558970242075   -0.054688
4   1558970242100   -0.046875
.         .              .
.         .              .
.         .              .

DATAFRAME2:

    time [s/1000]     DATA2 
0   1558970242000   -0.054567
1   1558970242050   -0.073567
2   1558970242100   -0.954543
.         .              .
.         .              .
.         .              .

Желаемый результат:

    time [s/1000]      DATA1        DATA2
0   1558970242000   -0.019531     -0.054567      **hold data for 25ms
1   1558970242025   -0.078125     -0.054567
2   1558970242050   -0.058594     -0.073567
3   1558970242075   -0.054688     -0.073567
5   1558970242100   -0.046875     -0.954543
.         .              .            .
.         .              .            .  
.         .              .            .

У меня возникли проблемы с выяснениемкак это реализовать.Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Это отличный вариант использования для merge_asof ( документов ):

df
            time     DATA1
0  1558970242000 -0.019531
1  1558970242025 -0.078125
2  1558970242050 -0.058594
3  1558970242075 -0.054688
4  1558970242100 -0.046875

df2
            time     DATA2
0  1558970242000 -0.054567
1  1558970242050 -0.073567
2  1558970242100 -0.954543

pd.merge_asof(df, df2, on='time')

            time     DATA1     DATA2
0  1558970242000 -0.019531 -0.054567
1  1558970242025 -0.078125 -0.054567
2  1558970242050 -0.058594 -0.073567
3  1558970242075 -0.054688 -0.073567
4  1558970242100 -0.046875 -0.954543

Пояснение

Для каждой строки в слева DataFrame, объединение по умолчанию direction='backward' выбирает строку last из правого DataFrame, чья клавиша 'on' на меньше или равна левой клавише.

В вашем случае это означает, что каждая строка в результирующем DataFrame содержит значение DATA2 с отметки времени в строке.«Что касается отметки времени в этой строке, вот последнее наблюдаемое значение DATA2

2 голосов
/ 27 сентября 2019

Переиндексировать второй кадр данных, чтобы иметь ту же частоту, что и первый:

df1 = df1.set_index('time [s/1000]')
df2 = df2.set_index('time [s/1000]')
result = df1.join(df2.reindex(df1.index, method='ffill'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...