Pandas合并列,但不合并'关键'列

28 投票
1 回答
24431 浏览
提问于 2025-04-17 20:59

这可能听起来像个傻问题,但我已经困扰这个问题一段时间了。

这是第一个数据框(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')来合并就会简单很多。

撰写回答