首页 > 解决方案 > Pandas concat 多级索引数据框并合并同一级别内的同名列

问题描述

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

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

任何帮助将非常感激。谢谢

标签: pythonpandas

解决方案


使用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.xswith DataFrame.sort_index,添加原始非选定的 caolumns 值Index.union,最后更改顺序为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

推荐阅读