我有两个数据框架。我需要在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