Pandas聚合后如何消除二级列索引,将统计字段设为同级别列?
Pandas分组聚合后多级列索引处理方案
问题说明
原始DataFrame列结构:
Indexstruktur Datensatz Workload Selectivity Dimensionen Anzahl Datenpunkte Operation Measure Wert
执行分组聚合代码后:
mean_df = df.groupby(["Indexstruktur", "Datensatz","Workload", "Selectivity", "Dimensionen", "Anzahl Datenpunkte", "Operation", "Measure"]).agg({"Wert":['mean','std']}) mean_df.reset_index(inplace=True)
结果生成了两级列索引,聚合得到的mean和std嵌套在Wert层级下,需要将这两个字段转为顶级列,命名为avg和std,与其他列同级。
解决方案
方法1:直接处理已生成的多级列索引
遍历多级列索引,合并非空层级的名称,再重命名目标列:
# 将多级列索引转为单级,空字符串层级直接忽略 mean_df.columns = ['_'.join(filter(None, col)) for col in mean_df.columns.values] # 把Wert_mean重命名为avg mean_df.rename(columns={'Wert_mean': 'avg'}, inplace=True)
方法2:聚合阶段直接指定列名(推荐)
在agg函数中直接定义最终列名,从根源避免多级索引:
mean_df = df.groupby( ["Indexstruktur", "Datensatz","Workload", "Selectivity", "Dimensionen", "Anzahl Datenpunkte", "Operation", "Measure"] ).agg( avg=('Wert', 'mean'), # 直接指定聚合结果列名为avg std=('Wert', 'std') # 直接指定聚合结果列名为std ).reset_index()
说明
- 方法2代码更简洁,无需后续处理多级索引,执行效率更高
- 方法1适用于已经生成多级索引的场景,快速完成层级合并
内容的提问来源于stack exchange,提问作者user6346482
相关产品推荐
相关产品推荐

