Pandas匹配两个数据帧中的两列,并在df1中创建新列

2024-09-29 19:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧

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作为newcolumn从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('Reindexing only valid with unique value index objects')我知道df1中的重复项产生了这个错误…但不知道如何解决。你知道吗


Tags: 数据图像image名称idindex错误jpg
2条回答

另一个有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

使用^{}仅获取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)

相关问题 更多 >

    热门问题