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

堆叠条形图绘制问题:按年龄段展示不同忠诚度分组的客户数

解决方案

你的核心问题是分组后的数据结构不符合堆叠条形图的要求,当前代码会把age_band和loyalty的每一个组合都生成单独条形,而非按age_band堆叠不同忠诚度分组的数据。以下是修正后的实现:

修正步骤与代码

  1. 整理数据格式:将分组后的多级索引数据转换为宽格式,让age_band作为行索引,loyalty作为列,值为去重后的客户ID数量
  2. 绘制横向堆叠条形图:使用barh类型实现y轴为age_band、x轴为客户数量的效果
import pandas as pd
import matplotlib.pyplot as plt

# 按年龄分组和忠诚度分组统计去重客户数,转成宽格式(缺失忠诚度分组补0)
customer_stats = df.groupby(['age_band', 'loyalty'])['customer_id'].nunique().unstack(fill_value=0)

# 绘制横向堆叠条形图
customer_stats.plot(kind='barh', stacked=True, figsize=(10, 6))

# 配置图表标签与样式
plt.xlabel('客户ID数量(去重)')
plt.ylabel('年龄分组')
plt.title('各年龄分组的客户忠诚度分布')
plt.legend(title='忠诚度分组')
plt.tight_layout()
plt.show()

代码说明

  • unstack(fill_value=0):将loyalty从多级索引转为列,确保每个age_band都包含所有3个忠诚度分组(无数据的分组填充0)
  • kind='barh':生成横向条形图,让age_band显示在y轴,符合你的需求
  • stacked=True:将同一age_band下不同忠诚度的数值堆叠为单个条形,每个条形最多包含3种颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:15:42