2016-07-06 32 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 
相關問題