2016-10-24 1 views
3

私は、各列の値に基づいて2つのデータフレームを結合(マージ)しようとしています。例えば 、DF1選択した列の値に基づいて2つのデータフレームを結合するにはどうすればよいですか?

A B C D L 
0 4 3 1 5 1 
1 5 7 0 3 2 
2 3 2 1 6 4 

そして、DF2

A B E F L 
0 4 3 4 5 1 
1 5 7 3 3 2 
2 3 8 5 5 5 

を有するので、AとB 内の列の値でマージする私はこのような構造で

A  B  C  D  E  F  L 
0 4  3  1  5  4  5  1 
1 5  7  0  3  3  3  2 
2 3  2  1  6  Nan Nan 4 
3 3  8  Nan Nan 5  5  5 
をD3を取得したいです

お助けください。私はマージとメソッドの両方を試しましたが、成功することはありません。

答えて

3

UPDATE:(更新のDFと新たな目標DF用)

In [286]: merged = pd.merge(df1, df2, on=['A','B'], how='outer', suffixes=('','_y')) 

In [287]: merged.L.fillna(merged.pop('L_y'), inplace=True) 

In [288]: merged 
Out[288]: 
    A B C D L E F 
0 4 3 1.0 5.0 1.0 4.0 5.0 
1 5 7 0.0 3.0 2.0 3.0 3.0 
2 3 2 1.0 6.0 4.0 NaN NaN 
3 3 8 NaN NaN 5.0 5.0 5.0 

データ:

In [284]: df1 
Out[284]: 
    A B C D L 
0 4 3 1 5 1 
1 5 7 0 3 2 
2 3 2 1 6 4 

In [285]: df2 
Out[285]: 
    A B E F L 
0 4 3 4 5 1 
1 5 7 3 3 2 
2 3 8 5 5 5 

OLD答え:

あなたがpd.merge(..., how='outer')メソッドを使用することができます

In [193]: pd.merge(a,b, on=['A','B'], how='outer') 
Out[193]: 
    A B C D E F 
0 4 3 1.0 5.0 4.0 5.0 
1 5 7 0.0 3.0 3.0 3.0 
2 3 2 1.0 6.0 NaN NaN 
3 3 8 NaN NaN 5.0 5.0 

データ:あなたのソリューションのための

In [194]: a 
Out[194]: 
    A B C D 
0 4 3 1 5 
1 5 7 0 3 
2 3 2 1 6 

In [195]: b 
Out[195]: 
    A B E F 
0 4 3 4 5 
1 5 7 3 3 
2 3 8 5 5 
+0

感謝。しかし残念ながら、私が提供したサンプルデータは完全に動作しますが、実際のデータでは動作しません。したがって、データフレームと共に使用する場合、「マージ」リストにない値を持つものは見逃されます。また、この方法でマージすると、_xまたは_y接尾辞付きで他のcollを作成します。たぶんそれを行うための他の方法がありますか? – dbulgakov

+0

これにはさまざまな方法があります。例えば、 'join'や' concat'や 'map'関数を使うなどです。しかし、あなたに適格な答えを与えるためには、私たちはあなたの問題を理解するのに役立つ再現可能なデータセットが必要です... [良い再現可能なパンダの例を作る方法]を読んでください(http://stackoverflow.com/質問/ 20109391/how-to-make-good-reproducible-pandas-examples) - それは簡単ではありませんが、非常に効率的です – MaxU

+0

申し訳ありません。今の例は、完全に状況を表しています。 したがって、列LIも同じ出力を得たいとします。 – dbulgakov

関連する問題