pandas合并在具有不同名称的列上,避免重复

时间:2016-10-11 20:09:21

标签: python pandas merge

如何在两个具有不同名称的列上合并两个pandas DataFrame并保留其中一列?

df1 = pd.DataFrame({'UserName': [1,2,3], 'Col1':['a','b','c']})
df2 = pd.DataFrame({'UserID': [1,2,3], 'Col2':['d','e','f']})
pd.merge(df1, df2, left_on='UserName', right_on='UserID')

这提供了像这样的DataFrame

enter image description here

但显然我正在UserNameUserID合并,所以它们是相同的。我希望它看起来像这样。有没有干净的方法来做到这一点?

enter image description here

只有我能想到的方法是在合并之前将列重新命名为相同,或者在合并之后删除其中一列。如果熊猫自动掉落其中一个或者我可以做类似

之类的话,我会很高兴
pd.merge(df1, df2, left_on='UserName', right_on='UserID', keep_column='left')

2 个答案:

答案 0 :(得分:9)

如何将UserID设置为索引,然后加入第二个数据框的索引?

pd.merge(df1, df2.set_index('UserID'), left_on='UserName', right_index=True)

#   Col1    UserName    Col2
# 0    a           1       d
# 1    b           2       e
# 2    c           3       f

答案 1 :(得分:4)

它没有什么真正好的东西:它意味着保持列,因为左右或外连接等较大的情况会带来两列的附加信息。不要试图过度设计你的合并线,如你所说的那样明确

解决方案1:

df2.columns = ['Col2', 'UserName']

pd.merge(df1, df2,on='UserName')
Out[67]: 
  Col1  UserName Col2
0    a         1    d
1    b         2    e
2    c         3    f

解决方案2:

pd.merge(df1, df2, left_on='UserName', right_on='UserID').drop('UserID', axis=1)
Out[71]: 
  Col1  UserName Col2
0    a         1    d
1    b         2    e
2    c         3    f