2016-12-26 33 views
3

私は行単位でマージする必要がある2つの大きなデータフレームを持っています。これらの2つのデータフレームは、いくつかの重なり合う行を有することができる。python/pandasでデータを重複させて横並びにマージするデータフレーム

例:行-DATA1場合は、[キー] ==行:

data1 
    key name    patent 
    11 Alphagrep   112344 
    12 Citrix    112345 

data2 
    Sr name    patents 
    11 Alphagrep   112344 
    13 Taj    112322 

私は[キー、Srの] & [特許、特許]で

にこれらのデータフレームの行が賢明をマージしたいです-data2 [Sr] & row-data1 [patent] == row-data2 [patents]、[Merge]、または[else]を追加します。

結果は次のようになります。

data1 + data2 
    key name    patent 
    11 Alphagrep   112344 
    12 Citrix    112345 
    13 Taj    112322 

どのようにしてパンダでこれを行う必要がありますか?

答えて

3

あなたはこのような何かを行うことができます。

print data1, '\n', '\n', data2, '\n' 
data2.columns = data1.columns.tolist() 
data3 = pd.concat([data1, data2]).drop_duplicates() 
print data3 

出力:

key  name patent 
0 11 Alphagrep 112344 
1 12  Citrix 112345 

    Sr  name patents 
0 11 Alphagrep 112344 
1 13  Taj 112322 

    key  name patent 
0 11 Alphagrep 112344 
1 12  Citrix 112345 
1 13  Taj 112322 
+0

これは、この問題を回避するにはすてきなハックです。しかし、列が均等化できない(列の数が等しくない)状況があるとしたら、どのように動作しますか?私たちがパラメータを提供し、それらの列だけを確認する方法はありますか? – user248884

+0

@ user248884、__reproducible__サンプルデータセットと望ましい結果のデータセットを投稿できますか?またはさらに良い - 新しい質問を開きます... – MaxU

+1

ええ。特定のケースを作成し、新しい質問として投稿します。この解決策は既存の問題のために働くので、あなたはそれを受け入れるかもしれません:) – MYGz

1

​​とcombine_first

c1 = ['key', 'patent'] 
c2 = ['Sr', 'patents'] 

data1.set_index(c1) \ 
    .combine_first(
     data2.set_index(c2).rename_axis(c1) 
    ).reset_index() 

    key patent  name 
0 11 112344 Alphagrep 
1 12 112345  Citrix 
2 13 112322  Taj 
関連する問題