2013-05-01 9 views
5

互換性のあるキーで既にソートされている2つのデータフレーム(またはシリーズ)がある場合、それらを一緒に安価にマージして並べ替えを維持できるようにしたいと思います。私は)(CONCAT()と明示的なソートを経由以外のことを行う方法を参照することはできません2つのソートされたデータフレームをパンダでマージする効率的な方法はありますか?

a = pd.DataFrame([0,1,2,3], index=[1,2,3,5], columns=['x']) 
b = pd.DataFrame([4,5,6,7], index=[0,1,4,6], columns=['x']) 
print pd.concat([a,b]) 
print pd.concat([a,b]).sort() 

    x 
1 0 
2 1 
3 2 
5 3 
0 4 
1 5 
4 6 
6 7 

    x 
0 4 
1 0 
1 5 
2 1 
3 2 
4 6 
5 3 
6 7 

それはインターリーブ 'メソッドを示唆し、numpyのアレイと関連する説明のビットがあったように見えます、しかし私は良い答えを見つけていない。

+0

良い質問!織り交ぜはすでにソートされた2つの配列をソートするのとは異なりますが、私は確かです*すでにソートされた2つの配列をnumpyでソートすることについての質問を見ました(私は見つけることができません)...これはmergesort実装の一部でなければなりません...:s –

+1

http://stackoverflow.com/questions/12427146/combine-two-arrays-and-sort –

+0

私はheapq.merge()の提案がそこにあるのが好きですが、多分私はそれを使うことができますが、それはありませんネイティブな気がしないもののように見えますか?配列の長さの合計が線形でなければならないことが分かっているときに、非常に大きな系列のマージを行うため、並べ替えを利用したいのですが、並べ替えは非線形です。 (皮肉なことに、私がパンダを使用し始めたとき、私は "マージ"操作が結合の形ではなく、これを行ったと仮定しました) – patricksurry

答えて

0

我々は1つの列のみを持つabに問題を限定した場合、私は、この経路を通って行くだろうが:

s = a.merge(b, how='outer', left_index=True, right_index=True) 
s.stack().reset_index(level=1, drop=True) 
関連する問題