Pandas合并列,但不合并'关键'列
这可能听起来像个傻问题,但我已经困扰这个问题一段时间了。
这是第一个数据框(df1):
imp_type value
1 abc
2 def
3 ghi
这是第二个数据框(df2):
id value2
1 123
2 345
3 567
把这两个数据框合并在一起:
df1.merge(df2, left_on='imp_type',right_on='id')
结果是:
imp_type value id value2
1 abc 1 123
2 def 2 345
3 ghi 3 567
然后我需要删除 id
这一列,因为它实际上和 imp_type
列是重复的。为什么合并的时候默认会把两个数据框的连接键也拉进来呢?我觉得应该至少有个参数可以设置为 False,这样就可以不拉连接键进来了。有没有这样的选项,还是说我做错了什么?
1 个回答
20
我同意,如果能去掉其中一列会更好。当然,这样一来就要考虑剩下的那一列该叫什么名字。
不过,这里有个解决办法。你只需要把其中一列的名字改掉,这样合并后的列就会有相同的名字:
In [23]: df1 = pd.DataFrame({'imp_type':[1,2,3], 'value':['abc','def','ghi']})
In [27]: df2 = pd.DataFrame({'id':[1,2,3], 'value2':[123,345,567]})
In [28]: df2.columns = ['imp_type','value2']
In [29]: df1.merge(df2, on='imp_type')
Out[29]:
imp_type value value2
0 1 abc 123
1 2 def 345
2 3 ghi 567
改列名有点麻烦,特别是(正如DSM所提到的)相比于用.drop('id', 1)
来删除列。不过,如果你能在一开始就让要合并的列名字相同,那么用df1.merge(df2, on='imp_type')
来合并就会简单很多。