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