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

如何按列名的部分内容分组绘制Pandas箱线图?

实现按Year分组、Region区分的箱线图

嘿,这个需求其实用Pandas的数据重塑加上Seaborn就能轻松搞定!你已经提前提取的列映射表完全能用得上,不过如果列名格式规整的话,我们也可以直接从列名里拆分信息,两种方案我都给你整理出来:

步骤1:准备数据

先把你的原始数据集和映射表转换成Pandas DataFrame:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 原始宽格式数据集
raw_data = pd.DataFrame({
    'local_term_1year': [30, 20],
    'regional_term_1year': [30, 40],
    'local_term_2year': [40, 50],
    'regional_term_2year': [50, 60]
})

# 你已有的列映射表
col_map = pd.DataFrame({
    'column': ['local_term_1year', 'regional_term_1year', 'local_term_2year', 'regional_term_2year'],
    'year': ['1year', '1year', '2year', '2year'],
    'region': ['local', 'regional', 'local', 'regional']
})

步骤2:将宽表转成长表(两种方法)

箱线图需要长格式数据才能按分组和类别区分,这里有两种方式处理:

方法A:用你已有的映射表合并

如果列名格式不固定,用映射表是更稳妥的方式:

# 把宽表转成长表,保留列名和对应的值
long_data = raw_data.melt(var_name='column', value_name='value')

# 合并映射表,给每行数据加上year和region标签
final_data = pd.merge(long_data, col_map, on='column')

方法B:直接从列名拆分信息

如果你的列名格式({region}_term_{year})是固定的,直接拆分列名更高效,不用依赖映射表:

long_data = raw_data.melt(var_name='column', value_name='value')
# 按下划线拆分列名,提取region和year
long_data[['region', '_', 'year']] = long_data['column'].str.split('_', expand=True)
# 删掉没用的中间列
final_data = long_data.drop(['column', '_'], axis=1)

步骤3:绘制分组箱线图

用Seaborn的boxplot,指定x为year分组,y为数值,hue为region(用来区分颜色):

# 设置绘图风格
sns.set_style("whitegrid")

# 创建画布
plt.figure(figsize=(8, 6))

# 绘制箱线图
sns.boxplot(
    data=final_data,
    x='year',       # 按year分组
    y='value',      # 数值轴
    hue='region',   # 用region区分箱线颜色
    palette='Set2'  # 可选:指定配色方案
)

# 添加图表标注
plt.title('Value Distribution by Year Term and Region', fontsize=14)
plt.xlabel('Year Term', fontsize=12)
plt.ylabel('Value', fontsize=12)
plt.legend(title='Region', bbox_to_anchor=(1.05, 1), loc='upper left')

plt.tight_layout()
plt.show()

这样生成的图表会有两个分组(1year和2year),每个分组内有两个箱线,分别对应local和regional的数据,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:49:57