代码之家  ›  专栏  ›  技术社区  ›  Ahamed Moosa

如何正确合并两个熊猫数据帧

  •  1
  • Ahamed Moosa  · 技术社区  · 8 年前

    我有两个数据帧

    小精灵

    Code  Sales  Store
    A       10   alpha
    B        5   beta
    C        4   gamma
    B        3   alpha
    

    DF2

    Code   Unit_Price  
    A          2       
    B          3     
    C          4
    D          5
    E          6
    

    我想在这里做两件事。

    首先,我要检查df1中的所有唯一代码是否都在df2中

    其次,我想用代码合并这两个df2

    DF3,应该看起来像

    Code  Sales  Store   unit_price
    A       10   alpha      2
    B        5   beta       3
    C        4   gamma      4
    D        3   alpha      5
    

    我做的

    df3 = df1.merge(df2,on='Code',how='left')
    

    不确定我是否是对的,我将感谢你的时间和努力来帮助我做这份记录。

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

    需要 numpy.setdiff1d 对于检查成员身份,列的唯一值:

    print (np.setdiff1d(df1['Code'].unique(), df1['Code'].unique()))
    []
    
    print (np.setdiff1d(df2['Code'].unique(), df1['Code'].unique()))
    ['D' 'E']
    

    您的解决方案很好,尤其是在需要添加更多列时,如:

    print (df2)
      Code  Unit_Price  col
    0    A           2    7
    1    B           3    2
    2    C           4    1
    3    D           5    0
    4    E           6    3
    
    df3 = df1.merge(df2,on='Code',how='left')
    print (df3)
      Code  Sales  Store  Unit_Price  col
    0    A     10  alpha           2    7
    1    B      5   beta           3    2
    2    C      4  gamma           4    1
    3    B      3  alpha           3    2
    

    如果需要,只添加一列 map 通过 Series 什么应该更快:

    df1['unit_price'] = df1['Code'].map(df2.set_index('Code')['Unit_Price'])
    print (df1)
      Code  Sales  Store  unit_price
    0    A     10  alpha           2
    1    B      5   beta           3
    2    C      4  gamma           4
    3    B      3  alpha           3