Есть ли способ с помощью merge_asof сопоставить время в правом df с ближайшим временем в левом df, только когда нет результата с обратным соответствием?
Вот как я его решаю в момент Мне интересно, есть ли более простой способ.
# DUMMY DATA
import pandas as pd
import datetime as dt
import numpy as np
time0 = dt.datetime(2020, 4, 20,13,00)
times = [time0]
for i in range(3):
time0 += dt.timedelta(days=1)
times = times + [time0]
df1 = pd.DataFrame({'value1': [0, 1, 2, 3],'time':times})
#time in df2 is normally before time in df1
times2 = df1.time - dt.timedelta(hours=13)
# except for the first value that was pulled too late
times2.iloc[0] = times[0] + dt.timedelta(hours=1)
df2 = pd.DataFrame({'value2': [0, 1, 2, 3],'time':times2})
# MERGE DATA WITH BACKWARD AND NEAREST MATCH
df3_backward = pd.merge_asof(df1, df2, on="time", direction="backward")
df3_nearest = pd.merge_asof(df1, df2, on="time", direction="nearest")
df3 = pd.merge(df3_backward,df3_nearest[['time','value2']],on="time")
df3=df3.rename(columns={"value2_x":"value2_backward", "value2_y":"value2_nearest"})
# USE NEAREST IF BACKWARD MATCH DIDN'T GIVE ANY RESULT
df3['value_2']=np.where(pd.isna(df3.value2_backward),df3.value2_nearest,df3.value2_backward)
df3```