当前位置:首页>python>Python(Pandas 多级索引:多层分组数据重塑与拆堆)

Python(Pandas 多级索引:多层分组数据重塑与拆堆)

  • 2026-09-15 17:30:27
Python(Pandas 多级索引:多层分组数据重塑与拆堆)
处理多维度统计报表时,经常出现行多层级聚合结果,多级索引(MultiIndex)是Pandas处理多维统计的核心。很多开发者拿到groupby多级结果不会拆堆,难以导出常规表格。本篇实战多级索引生成、stack/unstack重塑、还原普通DataFrame。
场景:销售统计表,字段:year(年份)、month(月份)、area(区域)、product(产品)、revenue(营收)。按年‑月‑区域‑产品做多维度分组求和,得到多级索引结果,需要将层级索引展开为普通平面表格用于导出Excel。

代码示例

import pandas as pdimport numpy as npnp.random.seed(24)# 构造测试数据raw_data = {    "year": [2025,2026]*30,    "month": np.random.randint(1,7,60),    "area": ["华东","华北","华南"]*20,    "product": ["X设备","Y配件"]*30,    "revenue": np.random.randint(10000,80000,60)}df = pd.DataFrame(raw_data)# 多维度分组聚合,生成多级行索引multi_df = df.groupby(["year","month","area","product"])["revenue"].sum()print("===多级索引原始结果===")print(multi_df.head())# unstack:把最内层索引转为列unstack_df = multi_df.unstack("product")print("\n===unstack拆堆,产品变为列===")print(unstack_df.head())# reset_index 将全部层级索引还原为普通列flat_df = multi_df.reset_index()print("\n===还原普通平面表格===")print(flat_df.head())# 直接导出excel# flat_df.to_excel("./multi_sales.xlsx",index=False)
输出结果
===多级索引原始结果===year  month  area  product2025  1      华东    X设备         57061             华北    X设备         54411             华南    X设备        215771      2      华东    X设备         93876             华北    X设备         80907Name: revenue, dtype: int64===unstack拆堆,产品变为列===product               X设备  Y配件year month area               2025 1     华东     57061.0  NaN           华北     54411.0  NaN           华南    215771.0  NaN     2     华东     93876.0  NaN           华北     80907.0  NaN===还原普通平面表格===   year  month area product  revenue0  2025      1   华东     X设备    570611  2025      1   华北     X设备    544112  2025      1   华南     X设备   2157713  2025      2   华东     X设备    938764  2025      2   华北     X设备    80907

核心总结

  1. groupby传入多个分组字段,返回结果自动生成MultiIndex多级索引;
  2. unstack用于将某一层行索引转换为列;stack将列压缩为行索引;
  3. reset_index()是最常用操作,把所有索引层级转为普通数据列,方便导出报表;
  4. 多级索引适合分析,对外输出报表尽量展开为平面表,避免业务人员看不懂。

最新文章

随机文章