Python Pandas:根据df2中的值查找df1中的值,但在下一次迭代中删除df1行



我有两个数据框架。我需要在df2中匹配来自df1的值,并从df2中的同一行捕获值。捕获的值是唯一的,只能在输出中显示一次。

粗略简化数据:

df1:

Name    ID
0   Bob      1
1   Bob      2
2   Bob      3
3   Sam      4
4   Sam      5
5   Jon      6
6   Bob      7

df2:

Name
0   Sam
1   Bob
2   Sam
3   Bob
4   Bob
5   Bob
6   Jon

所需输出:

Name    ID
0   Sam      4
1   Bob      1
2   Sam      5
3   Bob      2
4   Bob      3
5   Bob      7
6   Jon      6

df = pandas.merge(df1, df2, on="Name")

生产:

Unnamed: 0_x Name  ID  Unnamed: 0_y
0              0  Bob   1             1
1              0  Bob   1             3
2              0  Bob   1             4
3              0  Bob   1             5
4              1  Bob   2             1
5              1  Bob   2             3
6              1  Bob   2             4
7              1  Bob   2             5
8              2  Bob   3             1
9              2  Bob   3             3
10             2  Bob   3             4
11             2  Bob   3             5
12             3  Sam   4             0
13             3  Sam   4             2
14             4  Sam   5             0
15             4  Sam   5             2
16             5  Jon   6             6
17             6  Bob   7             1
18             6  Bob   7             3
19             6  Bob   7             4
20             6  Bob   7             5
请问我做错了什么?

您可以为两个数据框架创建一个临时列,以标识每个名称的出现:

out = (df2.assign(occ=df2.groupby('Name').cumcount())
.merge(df1.assign(occ=df1.groupby('Name').cumcount()), on=['Name', 'occ'])
.drop(columns='occ'))
print(out)
# Output
Name  ID
0  Sam   4
1  Bob   1
2  Sam   5
3  Bob   2
4  Bob   3
5  Bob   7
6  Jon   6

最新更新