如何在两个具有不同名称的列上合并两个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
但显然我正在UserName
和UserID
合并,所以它们是相同的。我希望它看起来像这样。有没有干净的方法来做到这一点?
只有我能想到的方法是在合并之前将列重新命名为相同,或者在合并之后删除其中一列。如果熊猫自动掉落其中一个或者我可以做类似
之类的话,我会很高兴pd.merge(df1, df2, left_on='UserName', right_on='UserID', keep_column='left')
答案 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