如何自定义分组Pandas MultiIndex列层级:按性别而非统计量分组
解决方法
要实现按性别分组列的需求,核心是调整MultiIndex列的层级顺序并重新排序,具体步骤如下:
步骤1:调换列层级顺序
原DataFrame的列是双层索引,第一层为统计类型(Percent/N/Count),第二层为性别(Female/Male)。使用reorder_levels()将层级顺序调换为性别在前,统计类型在后:
# 把列索引层级从[统计类型, 性别]改为[性别, 统计类型] df.columns = df.columns.reorder_levels([1, 0])
步骤2:按新层级排序列
调换层级后列顺序较为混乱,用sort_index(axis=1)按新的列索引层级排序,让同一性别下的所有统计量归为一组:
# 按列索引排序,确保同一性别下的统计量连续排列 df_sorted = df.sort_index(axis=1)
步骤3:自定义统计量显示顺序(可选)
如果需要让每个性别下的统计量按N→Count→Percent的顺序显示(和目标输出完全匹配),用reindex指定顺序即可:
# 指定每个性别下的统计量顺序 stat_order = ['N', 'Count', 'Percent'] df_final = df_sorted.reindex(columns=stat_order, level=1)
完整代码示例
import pandas as pd data = {('Percent', 'Female'): {'Parents': 26.489226869455006, 'Spouse': 31.875792141951838}, ('Percent', 'Male'): {'Parents': 34.49901768172888, 'Spouse': 20.903732809430256}, ('N', 'Female'): {'Parents': 1578.0, 'Spouse': 1578.0}, ('N', 'Male'): {'Parents': 2545.0, 'Spouse': 2545.0}, ('Count', 'Female'): {'Parents': 418.0, 'Spouse': 503.0}, ('Count', 'Male'): {'Parents': 878.0, 'Spouse': 532.0}} df = pd.DataFrame.from_dict(data) # 调整层级顺序并排序 df.columns = df.columns.reorder_levels([1, 0]) df_sorted = df.sort_index(axis=1) # 自定义统计量顺序 stat_order = ['N', 'Count', 'Percent'] df_final = df_sorted.reindex(columns=stat_order, level=1) print(df_final)
运行后输出的列结构与目标一致:
Female Male N Count Percent N Count Percent Parents 1578.0 418.0 26.489227 2545.0 878.0 34.499018 Spouse 1578.0 503.0 31.875792 2545.0 532.0 20.903733
内容的提问来源于stack exchange,提问作者johnjohn
相关产品推荐
相关产品推荐

