如何对Pandas DataFrame按多列分组以提取绘图所需的特定值
解决方案
你完全可以通过Pandas内置的筛选+透视表功能搞定,全程不需要手动遍历,代码非常简洁:
第一步:筛选价格数据
直接用布尔索引提取所有Tag为Price的记录:
# 筛选价格数据 price_df = df[df['Tag'] == 'Price']
第二步:转换为适配绘图的宽表
用pivot方法把现有长表转成宽表,行设置为产品名、列设置为年份、值设置为价格,转换后的数据结构刚好匹配你要的分组柱状图输入要求:
plot_df = price_df.pivot(index='Product', columns='Year', values='Value')
转换后plot_df的结构如下:
| Product | 2019 | 2020 | 2021 |
|---|---|---|---|
| Apple | 0.23 | 0.23 | 0.24 |
| Banana | 0.81 | 0.83 | 0.90 |
| Papaya | 2.31 | 2.29 | 2.41 |
第三步:直接生成图表或提取坐标数据
如果直接用Pandas内置绘图能力,一行代码就能生成目标柱状图:
import matplotlib.pyplot as plt plot_df.plot(kind='bar', figsize=(10,6)) plt.xlabel('产品名称') plt.ylabel('价格') plt.title('各产品近年价格对比') plt.xticks(rotation=0) plt.show()
如果需要给第三方绘图工具提供数据,直接从转换后的宽表提取即可:
- X轴标签:
plot_df.index.tolist()即为所有产品名称列表 - 年份维度列表:
plot_df.columns.tolist()即为所有统计年份列表 - 单年份价格数据:按列提取即可,比如2019年价格为
plot_df[2019].tolist()
整个过程只有3行核心Pandas代码,相比手动遍历性能更高,就算是百万级的数据量也能高效处理。
内容的提问来源于stack exchange,提问作者Vivienne
相关产品推荐
相关产品推荐

