Pandas使用groupby分组求和后如何绘制用途对应总消费金额柱状图?
- 你当前代码中的
udp1()是非法调用,DataFrame实例不是可执行函数,直接输入udp1即可预览统计结果。 - 分组求和后如果未将索引重置为普通列,绘图时可能出现x轴取值异常的问题,建议调整分组写法简化后续操作。
正确实现步骤
1. 生成分组统计DataFrame
优先用as_index=False参数,直接将分组字段PURPOSE转为普通列,避免后续索引处理问题:
# 按用途分组统计总消费金额,直接生成带PURPOSE列的DataFrame udp1 = udp.groupby("PURPOSE", as_index=False)["MONEYSPENT"].sum()
如果你要保留原有写法,也可以后续手动重置索引:
# 原有写法基础上重置索引,把PURPOSE从索引转为普通列 udp1 = udp.groupby("PURPOSE")["MONEYSPENT"].sum().reset_index()
2. 绘制柱状图
依赖matplotlib实现绘图,pandas内置的plot方法可以直接调用:
import matplotlib.pyplot as plt # 绘制柱状图,指定x、y轴字段 udp1.plot(kind="bar", x="PURPOSE", y="MONEYSPENT", title="不同用途总消费金额对比") # 调整x轴标签旋转角度,避免文字重叠 plt.xticks(rotation=45, ha="right") # 自定义y轴标签 plt.ylabel("总消费金额") # 紧凑布局,避免标签被截断 plt.tight_layout() # 展示图表 plt.show()
如果是未重置索引的分组结果(即PURPOSE为索引的情况),可以简化写法直接绘图:
# 针对PURPOSE为索引的udp1 udp1.plot(kind="bar", y="MONEYSPENT", title="不同用途总消费金额对比") plt.xticks(rotation=45, ha="right") plt.ylabel("总消费金额") plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Ananya
相关产品推荐
相关产品推荐

