Лучший способ справиться с временной интерполяцией - преобразовать время в общее количество секунд из контрольной точки в прошлом. Затем вы можете интерполировать все значения, как если бы они были числами с плавающей запятой.
Вот ваши входные кадры данных df1 и df2:
df1 = pd.DataFrame({'lat':[15.13,12.14,13.215,11.1214,12.14],
'lon': [38.52, 37.536,39.86,38.536,37.536],
'Datetime': pd.to_datetime(['2019-03-09 16:05:07','2019-03-15 09:50:07','2019-03-09 11:03:47','2019-03-10 16:41:18','2019-03-09 06:15:27']),
'temp':[23,22,21,22,19]})
df2 = pd.DataFrame({'lat':[13.13,11.14,10.214,12.14],
'lon': [38.82, 36.36152,39.123,37.536],
'Datetime': pd.to_datetime(['2019-03-06 04:05:07 ','2019-03-15 19:51:07','2019-03-19 11:01:08','2019-03-10 16:15:27'])})
Вот как можно преобразовать время в числа с плавающей запятой, основываясь на секундах от контрольной точки в прошлом:
df1['seconds'] = df1.Datetime.apply(lambda x: (pd.to_datetime(x)-pd.to_datetime('2019-03-01 00:00:00')).total_seconds())
df2['seconds'] = df2.Datetime.apply(lambda x: (pd.to_datetime(x)-pd.to_datetime('2019-03-01 00:00:00')).total_seconds())
И, наконец, вы можете использовать функцию интерполяции из scipy или любого другого пакета для интерполяции, используя столбцы lat, lon и секунд (обратите внимание, что некоторые из ваших точек в df2 выходят за пределы диапазона, определенного в df1, и вы получаете nans как результат):
from scipy.interpolate import griddata
griddata((df1.loc[:,['lat','lon','seconds']].values),
df1.iloc[:,3].values,
(df2.iloc[:,[0,1,3]].values))