代码之家  ›  专栏  ›  技术社区  ›  redwolf_cr7

当两个熊猫数据帧的索引不同时,将一列从一个熊猫数据帧添加到另一个熊猫数据帧

  •  2
  • redwolf_cr7  · 技术社区  · 8 年前

    我是巨蟒的新手。我有两个不同索引的熊猫数据帧。我想把一列从一列复制到另一列。 数据帧1:保存每个图像所属的ID和类

          ID  index  class
    0  10472  10472      0
    1   7655   7655      0
    2   6197   6197      0
    3   9741   9741      0
    4   9169   9169      0
    

    数据帧2:保存索引中图像的ID和数据列中的图像数据

                                                        data
    index                                                   
    5882   [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
    360    [[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0...
    1906   [[[255, 255, 255, 0], [255, 255, 255, 0], [255...
    3598   [[[255, 255, 255, 0], [232, 232, 247, 25], [34...
    231    [[[255, 255, 255, 0], [234, 234, 234, 0], [57,...
    

    我想遍历dataframe1并获取图像ID,在索引中查找与之匹配的ID的dataframe 2,然后将“data”列复制到dataframe1。我如何才能做到这一点(以性能最佳的方式)?

    1 回复  |  直到 8 年前
        1
  •  2
  •   jezrael    8 年前

    首先,匹配数据需要相同的类型,因此如果得到不同的类型:

    print (df1['index'].dtype)    
    int64
    print (df2.index.dtype)   
    object
    

    有两种可能的解决方案-通过以下方式将索引转换为整数:

    df2.index = df2.index.astype(int)
    

    或列到字符串:

    df1['index'] = df1['index'].astype(str)
    

    然后使用 map 按列 data 在里面 df2 :

    df1['data'] = df1['index'].map(df2['data']) 
    

    或者如果需要添加多个列 DF2 (例如在真实数据中)使用 join :

    df1 = df1.join(df2, on=['index'])