2016-07-06 28 views
2

我有一个相当高的长度(100,000+)的熊猫数据框,我想合并这个数据框与另一个基于最接近的元素(通过索引)数据帧对象。例如,让我们说,对象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 

我现在做的东西沿着这些路线来得到这个工作,但我得到重新索引错误(非唯一索引):

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

它返回一个ValueError:

ValueError: cannot reindex a non-unique index with a method or limit

+0

您所提供的多对一个例子发生在上日期时间是相同的合并。那是故意的吗?如果不是的话,你能否提供一个“关闭”意味着什么以及你希望如何处理它的例子? – piRSquared

+0

@unutbu:是的!对不起,它的目的是要2016-06-05 08:30:10 – sos

+0

@piRSquared:是的!这是故意的。我希望保留索引的重复项 – sos

回答

3

执行reindex的唯一值O f另一个指数。您将在加入过程中选取重复项。

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 
相关问题