我有两个数据帧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列,但展位数据框中的行数不同。
答案 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
我宁愿自己张贴这个,这样我可以告诉你我不建议使用它。