2017-06-23 9 views
1

私の質問はPandas Merge - How to avoid duplicating columnsに似ていますが、以下の特定の例の解決策が見つかりません。パンダは列を複製せずに2つのデータフレームを結合します

私はDateFrame DFを持っている:

Customer Address 
J. Smith 10 Sunny Rd Timbuktu 

とDATAFRAMEメール:

Name  Email 
J. Smith [email protected] 

私が生産する2つのデータフレームをマージしたい:

Customer Address     Email 
J. Smith 10 Sunny Rd Timbuktu [email protected] 

私は、次のコードを使用しています:

data_names = {'Name':data_col[1], ...} 
mapped_name = data_names['Name'] 
df = df.merge(emails, how='inner', left_on='Customer', right_on=mapped_name) 

結果は次のとおりです。

Customer Address     Email     Name 
J. Smith 10 Sunny Rd Timbuktu [email protected] J. Smith 

私はちょうどmapped_nameという名前の列を削除することもできますが、mapped_nameは、「顧客」である可能性があり、その場合には、私は両方のカスタマー列を削除したくないという可能性があります。

アイデア?

私はあなたがデフォルト値ので how='inner'を省略することができ、 Customeremailデータフレームの最初の列の名前を変更することができると思い
+0

df.drop(mapped_name、axes = 1、inplace = True)を使用して不要な列を削除することもできます。 –

答えて

1

:別の答えとして

emails.columns = ['Customer'] + emails.columns[1:].tolist() 

df = df.merge(emails, on='Customer') 
print (df) 
    Customer    Address    Email 
0 J. Smith 10 Sunny Rd Timbuktu [email protected] 

と同様のソリューションは - [0]により選択された第1の列の名前を変更可能です:

df = df.merge(emails.rename(columns={emails.columns[0]:'Customer'}), on='Customer') 
print (df) 
    Customer    Address    Email 
0 J. Smith 10 Sunny Rd Timbuktu [email protected] 
1

メール名の列名を「お客様」に変更してから、マージすることができます。この方法では、列をまったく削除することについて心配する必要はありません。

df.merge(emails.rename(columns={mapped_name:'Customer'}), how='inner', on='Customer') 
Out[53]: 
    Customer    Address    Email 
0 J. Smith 10 Sunny Rd Timbuktu [email protected] 
関連する問題