【问题标题】:Pandas - match two columns from two data frames and create new column in df1Pandas - 匹配来自两个数据帧的两列并在 df1 中创建新列
【发布时间】:2019-07-15 00:27:16
【问题描述】:

我有两个数据框

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

我想根据列 Image 匹配两个数据框,并将 df2 中的 Id 作为新列返回到 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 uniquely valued index objects') 我知道 df1 中的重复项正在创建此错误...但不知道如何解决。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      使用drop_duplicates 只为map 获取唯一的image 值:

      #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)
      

      【讨论】:

        猜你喜欢
        • 2019-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 2021-03-10
        • 1970-01-01
        • 2020-06-15
        相关资源
        最近更新 更多