如何在 Python Pandas 中使用一个数据框中的几列进行合并?

How to make merge using a few columns in one Data Frame in Python Pandas?

我有两个 Pandas 数据框,如下所示:

table1

ID
------
11
22
33
44

table2

ID1    ID2   ID3    VAL
----------------------
11  | 108  | 5    | 5555
45  | 22   | 1146 | 4567
67  | 4987 | 33   | 105

我需要合并 table1 和 table2 使用来自 table1 的列“ID”和来自的列:“ID1”、“ID2”、“ID3” table2.

我想这样做:

  1. 合并 ID 和 ID1
  2. 如果 ID 不与 ID1 合并 --> 合并 ID 和 ID2
  3. 如果 ID 不与 ID1 和 ID2 合并 --> 合并 ID 和 ID3
  4. 如果行不合并,则给出 NULL 或 NaN

因此我需要 table 如下所示:

ID    ID1    ID2    ID3    VAL
-------------------- -----------
11  | 11   | NULL | NULL | 5555
22  | NULL | 22   | NULL | 4567
33  | NULL | NULL | 33   | 105
44  | NULL | NULL | NULL | NULL

我如何在 Python Pandas 中做到这一点?

for c in df2.columns[:-1]:
    df1[c] = np.where(df1['ID'].eq(df2[c]),df1['ID'],np.nan)
df1 = df1.join(df2.iloc[:,-1])
ID ID1 ID2 ID3 VAL
0 11 11 nan nan 5555
1 22 nan 22 nan 4567
2 33 nan nan 33 105
3 44 nan nan nan nan