多索引DataFrame中如何将列标题Mode移至下一行?
如何将DataFrame的列标题Mode移至下一行?
原始代码
from collections import defaultdict import pandas as pd dic = {'US':{'Traffic':{'new':1415, 'repeat':670}, 'Sales':{'new':67068, 'repeat':105677}}, 'UK': {'Traffic':{'new':230, 'repeat':156}, 'Sales':{'new':4568, 'repeat':10738}}} d1 = defaultdict(dict) for k, v in dic.items(): for k1, v1 in v.items(): for k2, v2 in v1.items(): d1[(k, k2)].update({k1: v2}) df = pd.DataFrame.from_dict(d1, orient='index').reset_index() df.columns = ['Country', 'User Type', 'Traffic', 'Sales'] # 后续插入列与调整列索引操作 df.insert(loc=2, column=' ', value=None) df.insert(loc=0, column='Mode', value='Website') df.columns = df.columns.rename("Metric", level=1)
当前列标题样式
当前DataFrame采用双层列索引:
- 上层仅第一列标注为
Mode,其余列上层标题为空 - 所有列的下层统一标注为
Metric
显示时Mode单独占据第一行标题行,与下层的Metric行分离。
期望样式
希望将Mode标题移至下层,与其他列的Metric标题处于同一行,形成上层标题统一(可设为空)、下层包含Mode及原各列标题的结构。
实现方法
通过重新构造双层列索引,将Mode调整到下层标题行:
# 重新生成双层列索引,上层统一设为空,下层对应列名 new_cols = pd.MultiIndex.from_tuples( [(None, col[1]) if col[0] != 'Mode' else (None, 'Mode') for col in df.columns], names=[None, 'Metric'] ) # 替换原列索引 df.columns = new_cols
执行后,Mode会和其他列的下层标题显示在同一行,符合预期样式。
内容的提问来源于stack exchange,提问作者M J
相关产品推荐
相关产品推荐

