Для этого вы можете использовать merge_asof
, с direction='nearest'
.Исходя из форматирования вашего примера данных, я предполагаю, что done_at
является индексом, поэтому вам придется сначала сбросить индекс:
Настройка:
>>> df1
created_at PM 2.5 PM 10 entry_id
0 2018-06-13 16:11:43 4.67 5.17 20
1 2018-06-14 11:16:43 5.01 8.05 21
>>> df2
action end_at
done_at
2018-06-13 10:15:00 action 1 Nan
2018-06-11 12:15:00 action 2 Nan
df1['created_at'] = pd.to_datetime(df1['created_at'])
df2.index = pd.to_datetime(df2.index)
Слияние:
new_df = (pd.merge_asof(df2.reset_index().sort_values('done_at'),
df1[['created_at','PM 10']],left_on='done_at',
right_on='created_at', direction='nearest')
.drop('created_at',axis=1))
>>> new_df
done_at action end_at PM 10
0 2018-06-11 12:15:00 action 2 Nan 5.17
1 2018-06-13 10:15:00 action 1 Nan 5.17