Python 根据与不同数据帧最近的日期时间合并/加入数据帧

Python 根据与不同数据帧最近的日期时间合并/加入数据帧,python,datetime,pandas,dataframe,Python,Datetime,Pandas,Dataframe,我有一个相当长(100000+)的pandas数据帧,我想根据最接近的元素(通过索引)将此数据帧与另一个数据帧合并到另一个数据帧对象。例如,让我们假设对象1如下所示: DateTime x_1 y_1 2016-07-05 08:30:00 1 2 2016-07-05 08:30:01 3 4 2016-07-05 08:30:02 5 6 2016-07-05 08:30:03 7

我有一个相当长(100000+)的pandas数据帧,我想根据最接近的元素(通过索引)将此数据帧与另一个数据帧合并到另一个数据帧对象。例如,让我们假设对象1如下所示:

 DateTime                x_1   y_1
 2016-07-05 08:30:00     1     2
 2016-07-05 08:30:01     3     4 
 2016-07-05 08:30:02     5     6
 2016-07-05 08:30:03     7     8
 2016-07-05 08:30:05     9     10
 2016-07-05 08:30:11     11    12
对象2如下所示:

 DateTime                x_2   y_2
 2016-07-05 08:30:00     13    14
 2016-07-05 08:30:05     15    16
 2016-07-05 08:30:05     17    18
 2016-07-05 08:30:10     19    20
我想返回一个新对象object3,它的长度与object2相同,现在包含object1中最接近object2时间的项。在本例中,Object3如下所示:

 DateTime                x_2   y_2   x_1   y_1  
 2016-07-05 08:30:00     13    14    1     2
 2016-07-05 08:30:05     15    16    9     10
 2016-07-05 08:30:05     17    18    9     10
 2016-07-05 08:30:10     19    20    11    12
目前,我按照这些思路做了一些工作,以使其发挥作用,但我得到了reindex错误(非唯一索引):

object3=object2.join(object1.reindex(object2.index,method='nearest'),how='left')

返回一个valueerror:


ValueError:无法使用方法或限制重新索引非唯一索引

对其他索引的唯一值执行
重新索引
。您将在连接过程中拾取重复项

object3 = object2.join(object1.reindex(object2.index.unique(), method='nearest'))
结果输出:

                     x_2  y_2  x_1  y_1
DateTime                               
2016-07-05 08:30:00   13   14    1    2
2016-07-05 08:30:05   15   16    9   10
2016-07-05 08:30:05   17   18    9   10
2016-07-05 08:30:10   19   20   11   12

您提供的多对一示例恰好在相同的日期时间合并。这是故意的吗?如果没有,你能举例说明“关闭”是什么意思以及你希望如何处理它吗?@unutbu:是的!对不起,原定于2016-06-05 08:30:10@piRSquared:是的!这是故意的。我想保留索引的副本我的意思是,这是一个简单的等值合并,还是需要一些日期时间的模糊匹配?