我有两个数据帧
df1
Srlno id image
1 3 image1.jpg
2 3 image2.jpg
3 3 image2.jpg
df2
Srlno id image
1 1 image1.jpg
2 2 image2.jpg
3 3 image3.jpg
我想基于“图像”列匹配两个数据帧,并将ID从df2返回到df1作为新列。 df2中的图像名称是唯一的,而df1中的图像名称有很多重复项。我想保留重复的图像名称,但为df2中的每个图像填写正确的ID。
预期输出为:
Srlno id image newids
1 3 image1.jpg 1
2 3 image2.jpg 2
3 3 image2.jpg 2
我尝试过
df1['newids'] = df1['image'].map(df2.set_index('image')['id'])
这将返回错误InvalidInvexError(“仅对具有唯一值的索引对象重新索引”),我知道df1中的重复项正在创建此错误...但不知道如何解决。
答案 0 :(得分:5)
使用dict(zip())
df1['newids']=df1.image.map(dict(zip(df2.image,df2.id)))
print(df1)
Srlno id image newids
0 1 3 image1.jpg 1
1 2 3 image2.jpg 2
2 3 3 image2.jpg 2
答案 1 :(得分:3)
使用drop_duplicates
获得image
的唯一map
值:
#default keep first dupe
s = df2.drop_duplicates('image').set_index('image')['id']
df1['newids'] = df1['image'].map(s)
#keep last dupe
s = df2.drop_duplicates('image', keep='last').set_index('image')['id']
df1['newids'] = df1['image'].map(s)
#keep last dupe
d = dict(zip(df2['image'], df2['id']))
df1['newids'] = df1['image'].map(d)