2016-04-04 10 views
2

パンダで複数のデータフレーム(つまり2つ以上)をマージする最も効率的な方法は何ですか?いくつかの答えがあります。パンダで複数のデータフレームを効率的にマージ

  1. pandas joining multiple dataframes on columns
  2. Pandas left outer join multiple dataframes on multiple columns

が、これらはすべて、複数の結合伴います。私がN個のデータフレームを持っていれば、N-1個の結合が必要になります。

私がパンダを使用していなかった場合、別の解決策は、共通インデックスをキーにしたハッシュテーブルにすべてを入れて最終バージョンを構築することです。これは基本的にはSQLのハッシュ結合のようなものです。パンダのようなものがありますか?

もしそうでなければ、共通のインデックスを持つ新しいデータフレームを作成し、各データフレームから生データを渡すほうが効率的でしょうか? N-1結合のそれぞれで新しいデータフレームを作成できないように思えます。

ありがとうございました。

+0

どのようにそれらを結合するつもりですか?インデックスに?内部結合または左/外部結合? – MaxU

答えて

1

あなたは1つのコンベアでそれを行うことができ、インデックスして、データフレームを結合することができた場合:

df1.join(df2).join(df3).join(df4) 

例:

In [187]: df1 
Out[187]: 
    a b 
0 5 2 
1 6 7 
2 6 5 
3 1 6 
4 0 2 

In [188]: df2 
Out[188]: 
    c d 
0 5 7 
1 5 5 
2 2 4 
3 4 3 
4 9 0 

In [189]: df3 
Out[189]: 
    e f 
0 8 1 
1 0 9 
2 4 5 
3 3 9 
4 9 5 

In [190]: df1.join(df2).join(df3) 
Out[190]: 
    a b c d e f 
0 5 2 5 7 8 1 
1 6 7 5 5 0 9 
2 6 5 2 4 4 5 
3 1 6 4 3 3 9 
4 0 2 9 0 9 5 

それはあなたの代わりに

非常に高速かつ効果的であるべきそれらを連結することができます:

In [191]: pd.concat([df1,df2,df3], axis=1) 
Out[191]: 
    a b c d e f 
0 5 2 5 7 8 1 
1 6 7 5 5 0 9 
2 6 5 2 4 4 5 
3 1 6 4 3 3 9 
4 0 2 9 0 9 5 
DFの100Kの行それぞれにについて

時間の比較:あなたがjoinを見ることができるように

In [198]: %timeit pd.concat([df1,df2,df3], axis=1) 
100 loops, best of 3: 5.67 ms per loop 

In [199]: %timeit df1.join(df2).join(df3) 
100 loops, best of 3: 3.93 ms per loop 

は少し速くなる

関連する問題