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