web-dev-qa-db-ja.com

2つのマージpython pandas長さの異なるデータフレームがありますが、すべての行を出力データフレームに保持します

私には次の問題があります:2つの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            

ここでやりたいことは、2つのデータフレームをマージして、ColumnAとColumn1の値が同じ場合、df2の行がdf1の対応する行に追加されるようにすることです。

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

私はマージが可能であることを知っています

df1.merge(df2,left_on='Column1', right_on='ColumnA')

ただし、このコマンドは、両方のファイルのColumn1とColumnAで同じではないすべての行を削除します。その代わりに、上記のように、これらの行をdf1に保持し、他の行がdf2からの値を持つ列でNaNを割り当てるだけです。パンダでこれを行うスムーズな方法はありますか?

前もって感謝します!

25
sequence_hard

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

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

df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA')
27
Sina

左結合のようなものを探しているようです。この例が役立つかどうかを確認してください: http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html#left-outer-join

基本的に_how='left'_というmerge()にパラメータを渡すことができます

6
sgrg

Onとlistを使用してmergeを使用することもできます

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

詳細については、 link を参照してください

4
Nirali Khoda