python - 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
任何帮助将非常感激。谢谢
解决方案
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
with 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
推荐阅读
- bash - 我有一个包含日志文件的目录,我想匹配一个模式来删除它并将内容再次写入相同的文件
- android - 为什么我的应用程序的原始版本在更新后仍不断在 Google Play 上分发?
- ios - 在 NavigationBar 上方添加 UIView
- c# - SocketException:无法建立连接,因为目标机器主动拒绝它
- c# - 在 Unity for iOS 中读取/写入文本文件
- java - 在 ViewHolder 内部类中访问 RecyclerView.Adapter 数据
- sql - 触发子查询返回超过 1 个值
- c# - 当我将我的 MVC Web 应用程序从 ISS Express 切换到本地 ISS 错误时
- list - 是否可以在树视图中创建列表?奥多
- c# - 图表自动滚动(示波器效果)