Я пытаюсь объединить два кадра данных панд с разными индексами даты и времени. DF1 - это квартальная финансовая отчетность для компании XYZ, DF2 - это ежедневная цена закрытия публичных акций XYZ.
Проблема в том, что дата выпуска финансового отчета не всегда совпадает с тем, что присутствует для дневной цены закрытия (предположительно потому, что отчет был выпущен в выходные дни).
Мне нужноспособ размыкания дат из DF2, чтобы при слиянии их с DF1 слияние выбирало самую близкую дату из DF2 вместо того, чтобы оставлять пустое пространство для цены закрытия в слиянии.
В настоящее время используется:
df1 = [['2007-12-30','$xxx,xxx'],
['2008-03-30','$xxx,xxx'],
['2008-06-28','$xxx,xxx'],
['2008-09-29','$xxx,xxx'],
['2008-12-31','$xxx,xxx']]
df2 = [['2007-12-30','$45'],
['2008-03-30','$40'],
['2008-06-27','$38'],
['2008-09-29','$46'],
['2008-12-30','$50']]
df3 = pd.merge(df1, df2, how='outer', on='date')
ВОЗВРАТ:
df3 = [['2007-12-30','$xxx,xxx', '$45'],
['2008-03-30','$xxx,xxx', '$40'],
['2008-06-28','$xxx,xxx', 'NaN'],
['2008-09-29','$xxx,xxx', '$46'],
['2008-12-31','$xxx,xxx', 'Nan']]
ХОТИТЕ ВЕРНУТЬ:
df3 = [['2007-12-30','$xxx,xxx', '$45'],
['2008-03-30','$xxx,xxx', '$40'],
['2008-06-28','$xxx,xxx', '$38'],
['2008-09-29','$xxx,xxx', '$46'],
['2008-12-31','$xxx,xxx', '$50']]
Решение:
df3 = pd.merge(df1, df2, how='outer', on='date')\
.sort_index(ascending=False).fillna(method="ffill")
df3 = df3[df3.index.isin(df1.index)]