2016-07-06 14 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 

私は同じ長さを持つ新しいオブジェクト、オブジェクト3を、返すようにしたいですobject2になり、object2の時刻に最も近いobject1の項目が含まれるようになりました。オブジェクト3は、この場合には、次のようになります。

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を返し

:ユニークな値にreindexを行い

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

+0

多対1の例では、同じ日時にマージすることが起こります。それは意図的でしたか?そうでない場合は、「近い」とは何を意味し、どのように処理するかの例を挙げることができますか? – piRSquared

+0

@unutbu:はい!すみません、それは2016-06-05 08:30:10 – sos

+0

@piRSquared:yes!これは意図的だった。私はインデックスの重複を保持することを望んでいた – sos

答えて

3

を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 
関連する問題