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

E.K*_*.K. 11 python merge pandas

如何在两个具有不同名称的列上合并两个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')
Run Code Online (Sandbox Code Playgroud)

这提供了这样的DataFrame

在此输入图像描述

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

在此输入图像描述

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

pd.merge(df1, df2, left_on='UserName', right_on='UserID', keep_column='left')
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 13

如何设置UserIDas索引然后连接第二个数据框的索引?

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
Run Code Online (Sandbox Code Playgroud)


Bou*_*oud 6

里面没有什么好用的:它是要保留列,因为较大的情况(如左右或外部联接)会带来两列的附加信息。请勿过度设计您的合并线,如您建议的那样明确

解决方案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
Run Code Online (Sandbox Code Playgroud)

解决方案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
Run Code Online (Sandbox Code Playgroud)