У меня есть два кадра данных, один с новостями, а другой с курсом акций. Оба кадра данных имеют столбец «Дата». Я хочу объединить их с интервалом в 5 дней.
Допустим, мой информационный фрейм новостей df1, а другой ценовой фрейм df2.
Мой df1 выглядит так:
News_Dates News
2018-09-29 Huge blow to ABC Corp. as they lost the 2012 tax case
2018-09-30 ABC Corp. suffers a loss
2018-10-01 ABC Corp to Sell stakes
2018-12-20 We are going to comeback strong said ABC CEO
2018-12-22 Shares are down massively for ABC Corp.
Мой df2 выглядит следующим образом:
Dates Price
2018-10-04 120
2018-12-24 131
Первый метод слияния, который я делаю, это:
pd.merge_asof(df1_zscore.sort_values(by=['Dates']), df_n.sort_values(by=['News_Dates']), left_on=['Dates'], right_on=['News_Dates'] \
tolerance=pd.Timedelta('5d'), direction='backward')
Полученный df:
Dates News_Dates News Price
2018-10-04 2018-10-01 ABC Corp to Sell stakes 120
2018-12-24 2018-12-22 Shares are down massively for ABC Corp. 131
Второй способ слияния, который я делаю, это:
pd.merge_asof(df_n.sort_values(by=['Dates']), df1_zscore.sort_values(by=['Dates']), left_on=['News_Dates'], right_no=['Dates'] \
tolerance=pd.Timedelta('5d'), direction='forward').dropna()
И полученный df как:
News_Dates News Dates Price
2018-09-29 Huge blow to ABC Corp. as they lost the 2012 tax case 2018-10-04 120
2018-09-30 ABC Corp. suffers a loss 2018-10-04 120
2018-10-01 ABC Corp to Sell stakes 2018-10-04 120
2018-12-22 Shares are down massively for ABC Corp. 2018-12-24 131
Оба слияния приводят к отдельным dfs, однако в обоих случаях есть значения, которыеотсутствуют, как во втором случае по цене 4 октября, новости от 29, 30 сентября должны были быть объединены. И в случае 2 за 24 декабря цена 20 декабря также должна была быть объединена.
Так что я не совсем могу понять, где я ошибаюсь.
PS Моя цель - объединитьцена df с новостями df, пришедшими за последние 5 дней с даты цены.