如何将Multi-Index DataFrame的索引级别与列级别对齐?
解决Multi-Index DataFrame索引名称与列层级对齐的问题
问题场景
现有如下DataFrame:
import pandas as pd tt = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]}) tt.index.name = 'Index Column'
执行以下代码为列添加多级索引后:
tt = pd.concat([tt], keys=['Multi-Index Table Label'], axis=1)
得到的显示效果存在索引名称单独占空行的问题:
Multi-Index Table Label A B C Index Column 0 1 4 7 1 2 5 8 2 3 6 9
期望实现的效果是消除索引名称的空行,让Index Column与列的二级索引A、B、C处于同一行,同时保留索引名称:
Multi-Index Table Label Index Column A B C 0 1 4 7 1 2 5 8 2 3 6 9
解决方案
方法一:调整DataFrame结构(永久生效)
通过重置索引、重构列多级索引,再将目标列设回索引的方式,让索引名称与列层级对齐:
# 重置索引,将原索引转为普通列 tt = tt.reset_index() # 重构列的多级索引,把原索引名称纳入第二级 tt.columns = pd.MultiIndex.from_tuples([ ('Multi-Index Table Label', 'Index Column'), ('Multi-Index Table Label', 'A'), ('Multi-Index Table Label', 'B'), ('Multi-Index Table Label', 'C') ]) # 将目标列重新设为索引 tt = tt.set_index(('Multi-Index Table Label', 'Index Column'))
执行后DataFrame的显示效果就会符合预期,且结构上永久保留了索引名称与列层级的对齐关系。
方法二:通过样式调整显示效果(仅前端显示生效)
如果不想修改DataFrame的原始结构,可使用Styler调整显示样式,隐藏索引名称的空行:
tt.style.set_table_styles([ # 隐藏索引名称的单独行 {'selector': '.index_name', 'props': [('display', 'none')]}, # 可选:调整索引文本对齐方式,与列内容对齐 {'selector': '.row_heading', 'props': [('text-align', 'right')]} ])
这种方法仅改变显示效果,DataFrame的底层结构不会发生变化。
内容的提问来源于stack exchange,提问作者Chronicles
相关产品推荐
相关产品推荐

