【问题标题】:Pandas concat multi level index dataframes and merge same name columns within same levelPandas concat 多级索引数据框并合并同一级别内的同名列
【发布时间】:2020-06-29 10:17:59
【问题描述】:

我有两个多级索引数据框。当我连接它们时,相同名称的列会重复。

df1

Column
  col1 col2
     1    3
     2    4

我想将它与另一个 df 合并,

df2

Column
  col3
     5
     6

当我使用合并两者时

pd.concat([df1, df2], axis=1)

结果来了:

Column      Column
  col1 col2   col3
     1    3      5
     2    4      6

我想得到的是:

Column      
  col1 col2 col3
     1    3    5
     2    4    6

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用DataFrame.sort_index:

    pd.concat([df1, df2], axis=1).sort_index(axis=1)
    

    编辑:

    print (df1)
      Column     
        col5 col2
    0      1    3
    1      2    4
    
    print (df2)
      Column
        col1
    0      5
    1      6
    
    
    df = pd.concat([df1, df2], axis=1)
    
    c = df.columns.tolist()
    df = df.reindex(c[:1] + sorted(c[1:]), axis=1)
    print (df)
      Column          
        col5 col1 col2
    0      1    5    3
    1      2    6    4
    

    EDIT1:将DataFrame.xsDataFrame.sort_index 一起使用,通过Index.union 添加原始未选择的caolumns 值,并通过DataFrame.reindex 添加最后一个变更单:

    print (df)
      Column              a     
        col2 col1 col5 col1 col3
    0      1    5    3    5    4
    1      2    6    4    7    7
    
    cols = (df.xs('Column', drop_level=False, axis=1, level=0)
              .sort_index(ascending=False, axis=1).columns)
    print (cols)
    MultiIndex([('Column', 'col5'),
                ('Column', 'col2'),
                ('Column', 'col1')],
               )
    
    df = df.reindex(cols.union(df.columns, sort=False), axis=1)
    print (df)
      Column              a     
        col5 col2 col1 col1 col3
    0      3    1    5    5    4
    1      4    2    6    7    7
    

    【讨论】:

    • 谢谢。这有效,但它改变了我的列的顺序。我只想保留一个特定的列作为第一列,其余列可以排序
    • @Ronnie - 你认为df1concat 之后的第一列吗?
    • 是的,我想将 df1 中的第一列保留在 concat 之后的位置上。该列在两个数据框之间不常见,所以有没有办法对留下第一列的其他列进行排序?假设列的名称是“FirstColumn”。谢谢
    • 这对我有用。谢谢。还有一件事,有没有办法可以进一步对 2 级列进行排序?根据上面的例子,它是col1 col2 col3。非常感谢
    • 我在 Column 下有 col1 col2 col3,所以我想按 desc 顺序对它们进行排序,以便它们按顺序排列 col3 col2 col1。我在级别 1 上有多个列,即在 Column 级别。谢谢
    【解决方案2】:

    我们也可以使用DataFrame.combine_first:

    df3 = df1.combine_first(df2)
    

    【讨论】:

      猜你喜欢
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2021-02-26
      • 2020-07-21
      • 2019-10-19
      相关资源
      最近更新 更多