熊猫-从两个数据框中匹配两列并在df1中创建新列

Apr*_*cot 3 python dataframe pandas

我有两个数据框

df1

Srlno id  image
1      3    image1.jpg
2      3    image2.jpg
3      3    image2.jpg
Run Code Online (Sandbox Code Playgroud)

df2

Srlno  id   image
1       1   image1.jpg
2       2   image2.jpg
3       3   image3.jpg
Run Code Online (Sandbox Code Playgroud)

我想匹配基于“图像”列的两个数据帧,并将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
Run Code Online (Sandbox Code Playgroud)

我尝试过

df1['newids'] = df1['image'].map(df2.set_index('image')['id'])
Run Code Online (Sandbox Code Playgroud)

这将返回错误InvalidInvexError(“仅对唯一值索引对象有效的索引”)我知道df1中的重复项正在创建此错误...但不知道如何解决。

ank*_*_91 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
Run Code Online (Sandbox Code Playgroud)