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

按年龄组统计支出总和并绘制条形图的技术求助

解决各年龄组总支出条形图绘制问题

问题1分析与解决

你执行temp=df.groupby('AGE')['EXP'].sum()后,已经得到了每个年龄组对应总支出的Series对象。后续报错的原因是:

  • 你调用了temp.sum()(或temp3.sum(),推测是笔误),这会把所有年龄组的总支出再求和,得到单个numpy.float64数值,单个数值自然没有plot方法。
  • unstack(0)在这里完全多余,分组后的Series已经是AGE为索引、总支出为值的结构,无需拆分。

正确的绘图代码直接用分组后的结果即可:

temp = df.groupby('AGE')['EXP'].sum()
temp.plot.barh()  # 绘制水平条形图
# 若要垂直条形图,用 temp.plot.bar()

问题2分析与解决

你使用sns.barplot时犯了参数传递错误:

  • y=df['EXP'].values传入的是原始数据的所有支出值,而seaborn.barplot默认会对每个x分组(AGE)的y值计算均值,而非总和,这就是y轴数值远低于实际总支出的原因。

解决方法有两种:

方法1:指定estimator为求和

直接让seaborn对每个年龄组的EXP计算总和:

import seaborn as sns
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
sns.barplot(x='AGE', y='EXP', ci=0, ax=ax, data=df, estimator=sum)
plt.show()

注意y参数传列名'EXP'即可,不要传df['EXP'].values,同时通过estimator=sum指定聚合方式为求和。

方法2:先分组求和再传入数据

用提前分组好的汇总数据绘图,逻辑更直观:

temp = df.groupby('AGE')['EXP'].sum().reset_index()  # 转成DataFrame格式
sns.barplot(x='AGE', y='EXP', ci=0, ax=ax, data=temp)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:24:27