我有两个多级索引数据帧。当我连接它们时,相同的名称列变得重复。
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
任何帮助将不胜感激。谢谢
使用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.xs
与DataFrame.sort_index
一起使用,按Index.union
添加原始未选择的 caolums 值,按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
我们也可以使用DataFrame.combine_first
:
df3 = df1.combine_first(df2)