【发布时间】:2016-08-29 00:58:04
【问题描述】:
与我之前的一个问题 (Merge dataframes on nearest datetime / timestamp) 类似,我想使用最接近的匹配来合并两个日期时间列上的两个 pandas 数据框:
令 A 和 B 是两个数据帧,如下所示:
A = pd.DataFrame({"ID":["A", "A", "C" ,"B", "B"], "init_date":["01/01/2015","07/02/2014","08/02/1999","01/01/1991","06/22/2014"], "fin_date":["04/16/1923","09/24/1945","06/24/1952","11/26/1988","10/05/1990"]})
In [15]: A
Out[15]:
ID fin_date init_date
0 A 04/16/1923 01/01/2015
1 A 09/24/1945 07/02/2014
2 C 06/24/1952 08/02/1999
3 B 11/26/1988 01/01/1991
4 B 10/05/1990 06/22/2014
B = pd.DataFrame({"ID":["A", "A", "C" ,"B", "B"], "date":["02/15/2015","06/30/2014","07/02/1999","10/05/1990","06/24/2014"],"fin_date":["12/10/1926","01/01/1944","08/21/1955","12/12/1987","11/05/1991"], "value": ["3","5","1","7","8"] })
In [11]: B
Out[11]:
ID date fin_date value
0 A 02/15/2015 12/10/1926 3
1 A 06/30/2014 01/01/1944 5
2 C 07/02/1999 08/21/1955 1
3 B 10/05/1990 12/12/1987 7
4 B 06/24/2014 11/05/1991 8
生成的数据框应如下所示:
In [21]: C
Out[21]:
ID fin_date init_date value
0 A 04/16/1923 01/01/2015 3
1 A 09/24/1945 07/02/2014 5
2 C 06/24/1952 08/02/1999 1
3 B 11/26/1988 01/01/1991 7
4 B 10/05/1990 06/22/2014 8
一般问题可能与 init_date 和 fin_date 都不匹配,但是,例如,当 init_date 完全匹配时,我也会对解决方案感兴趣。
请注意,一个困难是一场比赛可能比最终日期更接近 init_date 中的值,而竞争比赛可能相反。在这种情况下,我更喜欢更接近 init_date 的那个。据我所知,在尝试了与链接中的方法类似的方法后,我发现“最近”的重新索引并未针对多索引实现。
谢谢你,感谢你的帮助,
【问题讨论】:
-
那么,您从上次发布问题时学到了什么?你试过什么,SO不是编码服务。