You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义分组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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:50:44