1. ホーム
  2. python

[解決済み] Pandas Merge - カラムの重複を回避する方法

2022-07-21 01:13:30

質問

2つのデータフレーム間でマージを試みています。 各データフレームには2つのインデックスレベル(日付、cusip)があります。 列の中で、いくつかの列は、例えば、2つの間で一致します(通貨、adjの日付)。

インデックスによってこれらをマージするが、通貨と adj date のコピーを 2 つ取らないようにする最良の方法は何でしょうか。

各データフレームは90カラムなので、私はすべてを手で書き出すことを避けようとしています。

df:                 currency  adj_date   data_col1 ...
date        cusip
2012-01-01  XSDP      USD      2012-01-03   0.45
...

df2:                currency  adj_date   data_col2 ...
date        cusip
2012-01-01  XSDP      USD      2012-01-03   0.45
...

もし私が

dfNew = merge(df, df2, left_index=True, right_index=True, how='outer')

私は

dfNew:              currency_x  adj_date_x   data_col2 ... currency_y adj_date_y
date        cusip
2012-01-01  XSDP      USD      2012-01-03   0.45             USD         2012-01-03

ありがとうございました! ...

どのように解決するのですか?

1つのDataFrameにのみ存在する列を調べ、これを使用してマージで列のサブセットを選択することができます。

cols_to_use = df2.columns.difference(df.columns)

そして、マージを実行します(これはインデックス・オブジェクトですが、便利な tolist() メソッドがあることに注意してください)。

dfNew = merge(df, df2[cols_to_use], left_index=True, right_index=True, how='outer')

これにより、マージ時にカラムが衝突するのを避けることができます。