如何为Pandas DataFrame新增多层列索引层级 分组MAE等四类指标
Pandas DataFrame多层列索引分组实现方案
我们这里示例将MAE、MSE、RMSE、MPE所在分组命名为误差指标,其余四列所在分组命名为其他指标,你可以根据实际需求修改分组命名、层级名称。
场景1:原有DataFrame为单层列索引
这是最常见的使用场景,直接构造列与分组的映射再替换原有列索引即可:
import pandas as pd import numpy as np # --------------- 模拟你现有的DataFrame,实际使用时替换为你自己的df即可 --------------- df = pd.DataFrame( np.random.randint(0, 10, size=(3, 8)), columns=['MAE', 'MSE', 'RMSE', 'MPE', '准确率', '召回率', 'F1值', '精确率'] ) # --------------- 核心实现逻辑 --------------- # 定义列所属分组的映射规则 group_mapping = { 'MAE': '误差指标', 'MSE': '误差指标', 'RMSE': '误差指标', 'MPE': '误差指标', '准确率': '其他指标', '召回率': '其他指标', 'F1值': '其他指标', '精确率': '其他指标' } # 生成多层列索引 new_multi_columns = pd.MultiIndex.from_tuples( [(group_mapping[col], col) for col in df.columns], names=['指标分组', '具体指标'] # 两个索引层级的名称,可自定义修改 ) # 替换原DataFrame的列索引 df.columns = new_multi_columns # 查看结果 print(df)
场景2:原有DataFrame已经是多层列索引(对应你给出的模拟数据结构)
如果你需要给已经有多层列索引的DataFrame新增顶层分组,用以下实现:
import pandas as pd import numpy as np # --------------- 你给出的模拟数据代码 --------------- mux3 = pd.MultiIndex.from_product([list('ABCD'),list('1234')], names=['one','two']) df3 = pd.DataFrame(np.random.choice(10, (3, len(mux3))), columns=mux3) # --------------- 核心实现逻辑 --------------- # 定义原列所属分组的规则,示例中我们把A、B开头的4列归为一组,C、D开头的4列归为另一组 def get_group(col_tuple): if col_tuple[0] in ['A', 'B']: return '分组1' else: return '分组2' # 生成包含新增顶层分组的三层列索引 new_columns = pd.MultiIndex.from_tuples( [(get_group(col), *col) for col in df3.columns], names=['新增顶层分组', *df3.columns.names] ) # 替换原列索引 df3.columns = new_columns # 查看结果 print(df3)
内容的提问来源于stack exchange,提问作者gmm005
相关产品推荐
相关产品推荐

