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

如何基于多层索引DataFrame为每个category_1绘制饼图和柱状图?

分层索引DataFrame的分组可视化实现

数据准备(中文翻译后)

先将原英文数据转换为中文格式,构建带分层索引的DataFrame:

import pandas as pd
import matplotlib.pyplot as plt

# 构建中文分层索引数据集
data = {
    '数量': [220, 176, 156, 144, 104, 224, 188, 140, 128, 120],
    '占比(%)': [27.5, 22, 19.5, 18, 13, 28, 23.5, 17.5, 16, 15]
}
index = pd.MultiIndex.from_tuples(
    [
        ('母婴儿童', '婴儿护理'),
        ('母婴儿童', '玩具'),
        ('母婴儿童', '男童服饰'),
        ('母婴儿童', '女童服饰'),
        ('母婴儿童', '男婴服饰'),
        ('女装', '派对礼服'),
        ('女装', '运动服饰'),
        ('女装', '泳装'),
        ('女装', '冬季服饰'),
        ('女装', '腕表')
    ],
    names=['一级品类', '二级品类']
)
df = pd.DataFrame(data, index=index)

分组绘图代码

针对每个一级品类,分别绘制二级品类的占比饼图和数量柱状图:

# 遍历每个一级品类分组
for 一级品类, 分组数据 in df.groupby(level='一级品类'):
    # 创建包含两个子图的画布
    fig, (饼图轴, 柱状图轴) = plt.subplots(1, 2, figsize=(12, 6))
    
    # 绘制占比饼图
    饼图轴.pie(
        分组数据['占比(%)'],
        labels=分组数据.index.get_level_values('二级品类'),
        autopct='%1.1f%%',
        startangle=90
    )
    饼图轴.set_title(f'{一级品类} - 二级品类占比')
    饼图轴.axis('equal')  # 保证饼图为正圆形
    
    # 绘制数量柱状图
    柱状图轴.bar(
        分组数据.index.get_level_values('二级品类'),
        分组数据['数量']
    )
    柱状图轴.set_title(f'{一级品类} - 二级品类数量')
    柱状图轴.set_xlabel('二级品类')
    柱状图轴.set_ylabel('数量')
    # 旋转x轴标签避免重叠
    plt.setp(柱状图轴.get_xticklabels(), rotation=45, ha='right')
    
    # 自动调整布局,防止内容截断
    plt.tight_layout()
    plt.show()

关键说明

  • 用groupby(level='一级品类')按第一层索引拆分数据,自动隔离每个一级品类的子数据集
  • 饼图通过pie方法实现,autopct控制百分比显示格式,axis('equal')确保饼图形状规整
  • 柱状图通过bar方法实现,旋转x轴标签解决长品类名称重叠问题
  • tight_layout()自动调整子图间距,避免标题、标签被画布截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:04:54