Python: проверка на похожий DatatimeIndex в фрейме данных с помощью where-функции - PullRequest
0 голосов
/ 16 октября 2019

У меня есть два разных фрейма данных, каждый из которых состоит из DatetimeIndex (например, 2016-04-01 00:00:54) и столбца, содержащего числовые значения. Отметки времени, а также длины двух кадров данных различны. Я хотел бы взять метки времени df-a, чтобы найти метки времени в df-b, которые находятся непосредственно перед и после метки времени df-a + соответствующих значений.

Это пример данных:

  1. df-a:
TS_TIMESTAMP             TREND_VALUE            
2019-04-03 18:48:10.970     1        
2019-04-04 16:49:23.320     1          
2019-04-05 13:19:33.550     1 
df-b:
TS_TIMESTAMP             TREND_VALUE 
2019-04-03 16:40:23.320     18.6
2019-04-03 18:50:10.970     9.34                    
2019-04-03 18:47:10.970     19.34        
2019-04-04 16:45:23.320     18.8
2019-04-04 16:52:23.320     8.84 
2019-04-04 16:53:23.320     8.5        
2019-04-05 13:11:33.550     18.48
2019-04-05 13:15:33.550     18.9
2019-04-05 13:23:33.550     8.4
2019-04-05 13:30:33.550     8.6   

В конце я хотел бы получить новый фрейм данных df-new, который содержит 3 столбца (+ их соответствующий DatetimeIndex): оригинальное значение df-a, значение df-b до, значение df-b после;

Ожидаемый результат будет выглядеть следующим образом:

TS_TIMESTAMP            TREND_VALUE   Value_before   Value_after
2019-04-05 13:15:33.550   NaN         18.9           NaN 
2019-04-05 13:19:33.550   1           NaN            NaN
2019-04-05 13:23:33.550   NaN         NaN            8.6

Я пытался использовать панд, где функция + фильтр:

import datetime
from datetime import timedelta

margin = datetime.timedelta(minutes = 15)

def control_time(df_a, df_b):
    df_new = pd.DataFrame()
    filter1 = df_b.index <= (df_a.index - margin)
    filter2 = df_b.index <= (df_a.index + margin)
    for row in df_b:
        df_new['Value_before'] = df_b.where(filter1)
        df_new['Value_after'] = df_b.where(filter2)
    return df_new

Когда я запускаю код df_new = control_time(df_a, df_b) Я получаю это сообщение об ошибке: ValueError: длины должны совпадать для сравнения Я не знаю, что еще использовать, кроме функции where (или маски, которая выбрасываетта же ошибка).

Пожалуйста, помогите!

...