У меня есть два фрейма данных, и для одного я хочу найти ближайшую (предыдущую) дату в другом.
Если дата совпадает, мне нужно взять предыдущую дату
df_main
содержит справочную информацию
Для df_sample
я хочу найти Time
в df_main
для ближайшей (но предыдущей) записи. Я могу сделать это, используя method='ffill'
, но если дата для поля Time
совпадает с днем, когда оно возвращается в этот день - я хочу, чтобы он возвращал предыдущий - в основном <
, а не <=
.
В моем примере df_res
я хочу, чтобы столбец closest_val
содержал [ "n/a", 90, 90, 280, 280, 280]
import pandas as pd
dsample = {'Index': [1, 2, 3, 4, 5, 6],
'Time': ["2020-06-01", "2020-06-02", "2020-06-03", "2020-06-04" ,"2020-06-05" ,"2020-06-06"],
'Pred': [100, -200, 300, -400 , -500, 600]
}
dmain = {'Index': [1, 2, 3],
'Time': ["2020-06-01", "2020-06-03","2020-06-06"],
'Actual': [90, 280, 650]
}
def find_closest(x, df2):
df_res = df2.iloc[df2.index.get_loc(x['Time'], method='ffill')]
x['closest_time'] = df_res['Time']
x['closest_val'] = df_res['Actual']
return x
df_sample = pd.DataFrame(data=dsample)
df_main = pd.DataFrame(data=dmain)
df_sample = df_sample.set_index(pd.DatetimeIndex(df_sample['Time']))
df_main = df_main.set_index(pd.DatetimeIndex(df_main['Time']))
df_res = df_sample.apply(find_closest, df2=df_main ,axis=1)