我有两个数据框,一个包含新闻,另一个包含股票价格。两个数据框都有一个“日期”列。我想以 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 中,但是两种情况下都有缺失的值,例如 10 月 4 日价格的第二种情况,来自 9 月 29 日和 9 月 30 日的新闻应该被合并。如果情况 2 是 12 月 24 日的价格,那么 12 月 20 日的价格也应该被合并。
所以我不太能弄清楚我哪里出了问题。
附:我的目标是将价格 df 与自价格日期起过去 5 天内发布的新闻 df 合并。