2015-10-12 10 views
13

私は次の問題を抱えています:異なる長さの2つのパンダデータフレームに共通の値と、異なる長さの2つのpython pandasデータフレームをマージして出力データフレームにすべての行を残します

df1:         df2: 

     Column1 Column2 Column3   ColumnA ColumnB ColumnC 
    0 a  x  x   0 c  y  y 
    1 c  x  x   1 e  z  z 
    2 e  x  x   2 a  s  s 
    3 d  x  x   3 d  f  f 
    4 h  x  x 
    5 k  x  x    

ColumnAと列1が同じ値を持っている場合はDF2からの行はこのように、DF1に対応する行に追加されるように、私が今やりたいことは2つのデータフレームをマージされています:

このような
df1: 
    Column1 Column2 Column3 ColumnB ColumnC 
    0 a  x  x  s  s 
    1 c  x  x  y  y 
    2 e  x  x  z  z 
    3 d  x  x  f  f 
    4 h  x  x  NaN  NaN 
    5 k  x  x  NaN  NaN 

私はマージが実行可能であることを知っていますugh df1.merge(df2,left_on='Column1', right_on='ColumnA')しかし、このコマンドは、両方のファイルのColumn1とColumnAで同じでないすべての行を削除します。その代わりに、これらの行をdf1に保存し、上記のように、他の行がdf2の値を持つ列にNaNを代入するだけです。パンダでこれを行うにはスムーズな方法がありますか?

ありがとうございます!

答えて

14

あなたがここにドキュメントを読むことができます:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

を、あなたが探しているものは左結合です。デフォルトのオプションは内部結合です。別の引数howを渡すことでこの動作を変更できます。

df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA') 
+0

私は彼が実際には '左に参加するために探していると思う:) – Mathiou

+0

あなたは正しいです。私は答えを編集します。 – Sina

+0

私はドキュメントを読むでしょう、速い答えをありがとう!正常に動作します。 –

3

あなたは単に linkに従ってください詳細については、同様

result = df1.merge(df2, on=['Column1']) 

に使用して、リストと合併使用することができますと呼ばれるmerge()にパラメータを渡すことができます

関連する問題