我有2个数据帧,第0列为'日期'。在最近的过去日期合并2个数据帧
有更多的次要日期比主要日期,他们是不同的(虽然时间紧)。
我想合并两个数据框,保留主日期作为参考,并选择辅助日期(行)根据主日期之前的直接日期合并。
main = pd.DataFrame({'Date':pd.to_datetime(
['2013-07-23', '2013-10-28', '2014-01-27', '2014-04-23',
'2014-07-22', '2014-10-20', '2015-01-27', '2015-04-27',
'2015-07-21', '2015-10-27', '2016-01-26', '2016-04-26', '2016-07-26']) })
Date
0 2013-07-23
1 2013-10-28
2 2014-01-27
3 2014-04-23
4 2014-07-22
5 2014-10-20
6 2015-01-27
7 2015-04-27
8 2015-07-21
9 2015-10-27
10 2016-01-26
11 2016-04-26
12 2016-07-26
而且
sec = pd.DataFrame({'Date':pd.date_range('2013-07-01',periods=42,freq='1MS')})
Date
0 2013-07-01
1 2013-08-01
2 2013-09-01
3 2013-10-01
...
38 2016-09-01
39 2016-10-01
40 2016-11-01
41 2016-12-01
日期应该与这个逻辑虽然只保留日期主要和列的其余两个dataframes合并:
(排序反向按时间顺序)
MERGED
Date Main Date Secondary
0 2016-07-26 2016-07-01
1 2016-04-26 2016-04-01
2 2016-01-26 2016-01-01
3 2015-10-27 2015-10-01
4 2015-07-21 2015-07-01
5 2015-04-27 2015-04-01
6 2015-01-27 2015-01-01
7 2014-10-20 2014-10-01
8 2014-07-22 2014-07-01
9 2014-04-23 2014-04-01
10 2014-01-27 2014-01-01
11 2013-10-28 2013-10-01
12 2013-07-23 2013-07-01
我发现的解决方案与合并2个最接近的日期有关,但对于这种情况,最接近的可能意味着违反“过去”条件的主日期之后的次日期。
这一看起来很相似,但我不知道如何将它应用到我的情况。
How to merge two dataframes based on the closest (or most recent) timestamp
'pd.merge_asof()' – DJK
感谢@ djk47463!我看到有一个参数tolerance = pd.Timedelta(),但如果我理解正确,它会找到最接近的值(可能是未来)。如何设定它过去? – Diego
它只在过去最接近的工作,查看'allow_exact_matches'参数 – DJK