如何用链式操作实现Pandas分组、过滤及饼图绘制并简化代码?
Pandas链式操作实现分组聚合、占比过滤与饼图绘制
优化后的链式代码
import pandas as pd import matplotlib.pyplot as plt # 链式完成分组、占比计算、小分组合并、排序与绘图 ( df.groupby('Publisher')['Global_Sales'] .sum() .sort_values(ascending=False) .pipe(lambda s: s / s.sum()) # 计算单出版商销量占总销量的比例 .pipe(lambda s: s.where(s >= 0.02, 'Other')) # 占比<2%的归为"Other" .groupby(level=0) # 按当前索引(含Other)重新分组求和 .sum() .sort_values(ascending=False) .plot( kind='pie', figsize=(10,5), legend=False, title='最具盈利能力的出版商' ) .set_ylabel('') # 移除冗余的y轴标签 ) plt.show()
代码优化说明
- 移除冗余中间变量:全程用链式调用替代原代码中多个临时变量(
Pb_Sales、total、index_list等),逻辑更连贯 - 替换for循环为矢量化操作:用
Series.where()替代原手动遍历索引的for循环,处理大数据集时效率提升数倍 - 链式操作拆解:
- 按出版商分组汇总全球销量并降序排序
- 用
pipe()传递Series,计算销量占比 - 批量替换占比低于2%的出版商为"Other"
- 重新分组合并"Other"的销量并再次排序
- 直接链式调用绘图,同步设置图表参数
原代码的问题点改进
- 原代码手动遍历索引修改的方式不仅冗余,还容易出现索引错位问题
- 链式调用让每一步数据转换逻辑清晰,便于维护和调试
内容的提问来源于stack exchange,提问作者just a tw highschooler
相关产品推荐
相关产品推荐

