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

在数据帧上正确合并不同长度的序列

  •  0
  • LucSpan  · 技术社区  · 6 年前

    组织

    我有一个 df1

         A    B   name
    0  ABC  DEF  test1
    1  UVW  XYZ  test2
    

    df2

       C   name
    0  1  test1
    

    和一个 df3 ,

       C  D   name
    0  1  1  test2
    

    以至于 df12 = pd.merge(df1, df2, on=['name']) 给予,

         A    B   name  C
    0  ABC  DEF  test1  1
    

    df13 = pd.merge(df1, df3, on=['name']) 给予,

         A    B   name  C  D
    0  UVW  XYZ  test2  1  1
    

    我该怎么办 先添加 df2型 df1型 df123

         A    B   name  C  D
    0  ABC  DEF  test1  1  NaN
    1  UVW  XYZ  test2  1  1
    

    我需要能够构造 df123型 在一个循环中。

    2 回复  |  直到 6 年前
        1
  •  1
  •   BENY    6 年前

    使用 combine_first set_index()

    df1=df1.set_index('name')
    df1.combine_first(df2.set_index('name')).combine_first(df3.set_index('name'))
    Out[144]: 
             A    B    C    D
    name                     
    test1  ABC  DEF  1.0  NaN
    test2  UVW  XYZ  1.0  1.0
    
        2
  •  1
  •   Space Impact    6 年前

    append merge

    df = df1.merge(df2.append(df3, sort=False),on='name')
    
    print(df)
         A    B   name  C    D
    0  ABC  DEF  test1  1  NaN
    1  UVW  XYZ  test2  1  1.0