将数据框多个列替换为另一个数据框的ID

时间:2019-05-28 15:27:38

标签: python pandas dataframe

我将Pandas Dataframe df1 设置为:

ID | c1 | c2 | c3
-----------------
1  | A  | B  | 32
2  | C  | D  | 34
3  | A  | B  | 11
4  | E  | F  | 3

df2

ID | c1 | c2
------------
1  | A  | B
2  | C  | D
3  | E  | F

列(c1,c2)上的 df1 df2 之间有外键。加入外观如下:

pd.merge(df1, df2, left_on=['c1','c2'], right_on = ['c1','c2'])

结果是:

ID_x| c1 | c2 | c3 | ID_y
-------------------------
1   | A  | B  | 32 | 1
2   | C  | D  | 34 | 2
3   | A  | B  | 11 | 1
4   | E  | F  | 3  | 3

我想用 df2.id 替换 df1 中的(c1,c2)。 预期的最终df1是:

ID| c3 | df2_id
---------------
1 | 32 | 1
2 | 34 | 2
3 | 11 | 1
4 | 3  | 3

换句话说,我想在df1中添加列“ df2_id”(为此行填充df2.id值),然后删除列(c1,c2)(它们不再需要)。

我有办法通过以下方式做到这一点:

  1. 在df1中保存来自合并的结果
  2. 删除不必要的列(c1,c2)
  3. 将“ ID_y”重命名为“ df2_id”,将“ ID_x”重命名为“ ID”

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

我们可以使用suffixes参数和on代替left_on, right_on,再加上方法链接和{{ 3}}:

df1.merge(df2, on=['c1','c2'], suffixes=['_1', '_2']).drop(['c1', 'c2'], axis=1)

输出

   ID_1  c3  ID_2
0     1  32     1
1     3  11     1
2     2  34     2
3     4   3     3

使其与OP的输出完全相同:

df1.merge(df2, on=['c1','c2'], suffixes=['', '_2']).drop(['c1', 'c2'], axis=1).rename(columns={"id_2": "df2_id"})