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

如何基于Pandas DataFrame按年份分组绘制价格箱线图?

嘿,我懂你遇到的小困扰了——用groupby拿到对象后确实不知道怎么继续画图,但其实完全不用纠结手动处理分组结果,有更简单直接的方法实现按年份绘制price箱线图的需求,给你三个实用方案,按需选择:

方案1:用Pandas原生绘图快速实现

Pandas的boxplot方法本身就支持按指定列分组绘制,根本不需要手动处理groupby对象,一行代码就能搞定核心逻辑:

import pandas as pd
import matplotlib.pyplot as plt

# 假设你的df已经加载完成
df.boxplot(column='price', by='year')
plt.title('Price Distribution by Year')  # 自定义图表标题
plt.suptitle('')  # 去掉Pandas自动添加的默认顶部标题
plt.xlabel('Year')
plt.ylabel('Price')
plt.show()

这段代码会自动按year列的不同值分组,为每个年份生成对应的price箱线图,所有图会放在同一个坐标系里,方便直接对比不同年份的价格分布。

方案2:用Seaborn绘制更美观的箱线图

如果想要更美观的样式和更丰富的统计细节,推荐用Seaborn库,代码同样简洁:

import seaborn as sns
import matplotlib.pyplot as plt

sns.boxplot(data=df, x='year', y='price')
plt.title('Price Distribution by Year')
plt.xlabel('Year')
plt.ylabel('Price')
plt.show()

Seaborn会自动处理分组逻辑,生成的图表自带美观的配色和网格,非常适合做数据分析展示。

方案3:手动遍历groupby对象绘制子图(适合分开展示)

如果你希望把每个年份的箱线图单独作为子图展示,那可以手动遍历groupby后的对象,逐个绘制:

import matplotlib.pyplot as plt

# 按year列分组
year_groups = df.groupby('year')

# 设置子图布局,这里按每行3个图排列
total_groups = len(year_groups)
rows = (total_groups + 2) // 3  # 计算需要多少行
fig, axes = plt.subplots(nrows=rows, ncols=3, figsize=(15, 10))
axes = axes.flatten()  # 把二维子图数组转为一维,方便遍历

# 逐个年份绘制箱线图
for idx, (year, group_data) in enumerate(year_groups):
    group_data.boxplot(column='price', ax=axes[idx])
    axes[idx].set_title(f'Price Distribution - {year}')
    axes[idx].set_ylabel('Price')

# 隐藏多余的空盘子图
for j in range(idx + 1, len(axes)):
    axes[j].set_visible(False)

plt.tight_layout()  # 自动调整子图间距
plt.show()

这个方案适合需要单独展示每个年份价格分布的场景,每个子图对应一个年份,布局清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:13:00