Pandas合并两个数据帧而不重复列

时间:2017-06-23 05:11:46

标签: python pandas

我的问题与Pandas Merge - How to avoid duplicating columns类似,但我找不到下面具体示例的解决方案。

我有DateFrame df:

Customer    Address
J. Smith    10 Sunny Rd Timbuktu

和Dataframe电子邮件:

Name        Email
J. Smith    j.smith@myemail.com

我想合并两个数据帧以产生:

Customer    Address                 Email
J. Smith    10 Sunny Rd Timbuktu    j.smith@myemail.com

我使用以下代码:

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    j.smith@myemail.com   J. Smith

虽然我可以删除名为mapped_name的列,但是mapped_name可能是' Customer'在这种情况下,我不想删除两个客户列。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为您可以将email数据框中的第一列重命名为Customerhow='inner'可以省略,因为默认值为:

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  j.smith@myemail.com

与另一个答案类似的解决方案 - 可以重命名由[0]选择的第一列:

df = df.merge(emails.rename(columns={emails.columns[0]:'Customer'}), on='Customer')
print (df)
   Customer               Address                Email
0  J. Smith  10 Sunny Rd Timbuktu  j.smith@myemail.com

答案 1 :(得分: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  j.smith@myemail.com