如何根据两个 pandas DataFrame 的匹配条件添加新列

Rah*_*wal 1 python dataframe pandas

我有两个数据框 d1 和 d2 如下:
d1

A   B   C    D
X   6   7   23
Y   3   4   35
B   5   8   45
D   11  7   15
L   10  1   5
Run Code Online (Sandbox Code Playgroud)

d2

A   C 
Y   4 
L   1 
D   7 
Run Code Online (Sandbox Code Playgroud)

并希望 d1 E 中的新列如下:

A   B   C   D   E
X   6   7   23  0
Y   3   4   35  1
B   5   8   45  0
D  11   7   15  1
L  10   1   5   1
Run Code Online (Sandbox Code Playgroud)

根据 d2 的 A 列和 C 列中的数据与 d1 的 A 列和 C 列中的数据匹配的情况添加新列 E,展位数据框中的行数不同。

cs9*_*s95 5

我将使用merge(对于 LEFT OUTER JOIN)带有指示器:

d1['E'] = (d1.merge(d2, on=['A', 'C'], how='left', indicator=True)
             .eval('_merge == "both"')
             .astype(int))
d1
   A   B  C   D  E
0  X   6  7  23  0
1  Y   3  4  35  1
2  B   5  8  45  0
3  D  11  7  15  1
4  L  10  1   5  1
Run Code Online (Sandbox Code Playgroud)

这是使用元组转换和检查的低效方法isin

d1['E'] = (
    d1[['A', 'C']].apply(tuple, axis=1).isin(d2.apply(tuple, axis=1)).astype(int))
d1
   A   B  C   D  E
0  X   6  7  23  0
1  Y   3  4  35  1
2  B   5  8  45  0
3  D  11  7  15  1
4  L  10  1   5  1
Run Code Online (Sandbox Code Playgroud)

我宁愿自己发布这个,这样我就可以告诉你我不推荐使用它。