我的问题与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'在这种情况下,我不想删除两个客户列。
有什么想法吗?
答案 0 :(得分:1)
我认为您可以将email
数据框中的第一列重命名为Customer
,how='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