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

如何在Python中使用多重索引实现数据分组与透视?

实现按Area分组统计多Job字段取值次数的多级列索引DataFrame

完整解决方案代码

import pandas as pd

data_input = {'Area':['North', 'South', 'West', 'East','North', 'South', 'West', 'East'], 
              "Job1":["T", "F", "T", "X","T", "F", "T", "X"],
              "Job2":["F", "X", "T", "X","T", "F", "T", "X"],
              "Job3":["T", "F", "T", "X","X", "X", "F", "T"]}
df1 = pd.DataFrame(data_input)

# 仅保留需要统计的Job字段(可选,若不需要Job3则添加此参数)
target_jobs = ['Job1', 'Job2']
# 宽格式转长格式,拆分Job字段和对应取值
melted_df = df1.melt(id_vars='Area', var_name='Job', value_name='Value', value_vars=target_jobs)

# 分组统计次数并重塑为多级列索引
result = melted_df.groupby(['Area', 'Job', 'Value']).size() \
                  .unstack(level=['Job', 'Value'], fill_value=0)

# 匹配期望的列顺序和行顺序
desired_columns = [('Job1', 'T'), ('Job1', 'F'), ('Job1', 'X'),
                   ('Job2', 'T'), ('Job2', 'F'), ('Job2', 'X')]
desired_index = ['North', 'South', 'East', 'West']

result = result.reindex(columns=desired_columns).reindex(index=desired_index)

print(result)

步骤说明

  1. 格式转换:使用melt将原DataFrame的宽格式转为长格式,把每个Job字段的名称和取值拆分为单独列,便于后续分组统计。如果不需要统计Job3,可通过value_vars指定目标Job字段。
  2. 分组统计:通过groupby按Area、Job、Value三级分组,用size()计算每组的出现次数,再用unstack将Job和Value转换为列的多级索引,fill_value=0确保未出现的取值组合显示为0。
  3. 索引调整:用reindex分别调整列顺序和行顺序,完全匹配期望输出的结构。

运行上述代码后,得到的结果与你提供的期望输出完全一致。

内容的提问来源于stack exchange,提问作者Namra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 13:06:26