如何根据一个数据框中的不同列合并两个数据框?

How to merge two dataframes based on different columns in one dataframe?

我有两个数据框:

df1 = pd.DataFrame({'id1':[3,2,1,4,5],'id2':[8,7,6,9,10]})
df2 = pd.DataFrame({'id3':[6,2,8,5,4],'Name':['a','b','c','e','d']})

df1

id1   id2
3     8
2     7
1     6
4     9
5     10

df2


id3   Name
6     a
2     b
8     c
5     e
4     d

描述

现在我想根据 id3 列的可用性,通过 df2 的 id3 和 df1 的 id1 或 id2 合并这两个数据帧。因此,最终的数据框将如下所示:

id1 id2 id3 Name
3   8   8   c
2   7   2   b
1   6   6   a
4   9   4   d
5   10  5   e

谁能帮我解决这个问题?

您可以合并 2 次:第一次合并 id1/id3,然后合并 id2/id3,然后加入 2 个数据帧:

更新

I want to restore the order of values of df1 in out dataframe as well.

out = pd.concat([df1.reset_index().merge(df2, left_on='id1', right_on='id3'),
                 df1.reset_index().merge(df2, left_on='id2', right_on='id3')]) \
        .sort_values('index').drop(columns='index').reset_index(drop=True)

输出:

>>> out
   id1  id2  id3 Name
0    1    6    6    a
1    2    7    2    b
2    3    8    8    c
3    4    9    4    d
4    5   10    5    e