VLOOKUP 使用 pandas 不重复

VLOOKUP using pandas without repetition

我有两个数据帧 df1 和 df2。如何使用 pd.merge 或任何其他函数获取 df3?

我尝试了什么?

df3=df1.merge(df2, on='A', how='left')

这为我提供了行数与 df2 相同的 df3。但是,我想要的是 df1 和 df3 中的行数相同。 df3 应该与所提供的示例完全相同。

df1

A   B
1   1
2   1
3   2
4   2
5   3
6   7
7   1
8   1
9   9
10  3

df2

A   C
1   XY
1   XY
2   XY
2   XY
2   XY
3   XY
3   XY
4   XY
4   XY
5   XY
5   XY
6   AB
6   AB
7   AB
8   AB
9   AB
9   AB
9   AB
10  MN
10  MN

df3

A   B   C
1   1   XY
2   1   XY
3   2   XY
4   2   XY
5   3   XY
6   7   AB
7   1   AB
8   1   AB
9   9   AB
10  3   MN

使用drop_duplicates保留一个(A, B)实例:

>>> df1.merge(df2, on='A', how='left').drop_duplicates(['A', 'B'], ignore_index=True)
     A  B   C
0    1  1  XY
2    2  1  XY
5    3  2  XY
7    4  2  XY
9    5  3  XY
11   6  7  AB
13   7  1  AB
14   8  1  AB
15   9  9  AB
18  10  3  MN

地图也可以

# map df2.C to df1.A via df2.A
df1["C"] = df1.A.map(df2.drop_duplicates().set_index('A').C)
df1