我将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)(它们不再需要)。
我有办法通过以下方式做到这一点:
有更好的解决方案吗?
答案 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"})