如何基于两个熊猫DataFrame上的匹配条件添加新列

时间:2019-06-28 18:06:47

标签: python pandas dataframe

我有两个数据帧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

d2

A   C 
Y   4 
L   1 
D   7 

,并希望在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

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

1 个答案:

答案 0 :(得分:4)

我将使用merge(用于左外部联接)和指示器:

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

使用元组转换和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

我宁愿自己张贴这个,这样我可以告诉你我不建议使用它。