Pandas按年份汇总数值排序及带标签条形图绘制实现
Pandas场景下年度数值聚合与可视化实现
一、年度数值计算与排序
- 先完成基础数据清洗:将年份列统一为可分组的统一类型(推荐转成字符串,避免数值型年份在排序、分类展示时出现格式错位),将数值列转换为可计算的数值类型,自动过滤无法识别的脏值
- 按年份维度分组聚合,计算每个年份的数值总和,再按需求排序输出,核心实现代码:
import pandas as pd import matplotlib.pyplot as plt # 假设原始数据框为df,包含两列:year(年份)、value(对应行的数值) # 数据类型校验清洗 df['year'] = df['year'].astype(str) df['value'] = pd.to_numeric(df['value'], errors='coerce') # 分组求和+排序(如需按总数值降序展示,设置ascending=False;如需按年份先后排序,将by参数替换为'year') year_total = df.groupby('year', as_index=False)['value'].sum().sort_values(by='value', ascending=False) # 直接打印即可查看排序后的年度总数值 print(year_total)
二、带数值标签的横向条形图绘制
需求指定y轴为year维度,直接使用matplotlib的横向条形图barh实现,逐根条形绑定数值标签即可,核心代码:
- 先配置绘图环境的中文显示,避免标签乱码
- 绘制时绑定分组后的年度总数值作为条形长度
- 遍历每个条形对象,在条形末端标注对应的总数值
# 配置中文显示参数 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False fig, ax = plt.subplots(figsize=(8, 6)) # 绘制横向条形图,y轴位置为年份,x轴长度为对应年度总数值 bar_container = ax.barh(year_total['year'], year_total['value']) # 给每根条形添加数值标签,fmt参数可调整数值的显示格式 ax.bar_label(bar_container, fmt='{:,.0f}', padding=4) # 调整轴标签、反转y轴匹配排序结果的展示顺序 ax.set(ylabel='年份', xlabel='年度总数值') ax.invert_yaxis() plt.tight_layout() plt.show()
常见注意点
- 如果原始数据的年份和数值没有拆分成独立两列,先通过字符串拆分、位置提取的方式把年份字段独立成列,后续聚合逻辑完全通用
- 若标签出现重叠,可适当调大
figsize的画布尺寸,或缩小标签的显示字号 - 排序逻辑可灵活调整,不需要额外复杂的转换
内容的提问来源于stack exchange,提问作者hmd
相关产品推荐
相关产品推荐

