2017-06-23 172 views
1

我的问题与Pandas Merge - How to avoid duplicating columns类似,但我找不到下面的具体示例的解决方案。熊猫合并两个数据帧而不复制列

我有DateFrame DF:

Customer Address 
J. Smith 10 Sunny Rd Timbuktu 

和数据帧电子邮件:

Name  Email 
J. Smith [email protected] 

我想这两个dataframes合并产生:

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可能是“客户”,并在这种情况下,我不想删除这两个客户列。

任何想法?

+0

甚至可以使用df.drop(mapped_name,axis = 1,inplace = True)删除不需要的列, –

回答

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 [email protected] 

与同类解决方案,另一种答案 - 是有可能重命名的第一列由[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 [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]