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

pandas分组统计后用seaborn绘制多级柱状图的代码问题排查

代码报错原因与修正方案

原有代码存在的3个核心问题

  • 变量未先定义就赋值:执行grouped_gender['count'] = ...前,grouped_gender对象不存在,会直接触发NameError。
  • 分组结果结构不符合绘图要求:groupby(['Prod', 'Gender'])[['Prod']].count()默认会把Prod、Gender设为多级行索引,不会保留为普通列,seaborn无法读取到这两个字段作为绘图的x轴和分组维度。
  • 绘图参数逻辑错误:设置dodge=False会让不同性别的柱子完全重叠,无法实现分组柱状图的并排展示效果。

修正后可运行代码

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 分组统计:as_index=False会把分组字段保留为普通列,不设为索引
grouped_gender = main_data.groupby(['Prod', 'Gender'], as_index=False)['Prod'].count()
# 重命名计数列,避免和原Prod字段混淆
grouped_gender = grouped_gender.rename(columns={'Prod': 'count'})

# 绘制分组柱状图
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 7))
barplot2 = sns.barplot(
    data=grouped_gender,
    x='Prod',
    y='count',
    hue='Gender',
    orient='v',
    ax=axes,
    ci=None,
    dodge=True  # 开启柱子错位,同Prod下不同性别的柱子并排展示
)
plt.show()

简化写法提示:如果不需要提前留存分组统计结果,可以直接调用sns.countplot()完成绘图,不需要手动做分组计数:

sns.countplot(data=main_data, x='Prod', hue='Gender', ax=axes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:36:20