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

如何从含列表列的DataFrame创建带hue的Seaborn分组箱线图

解决方法:处理列表列并绘制分组箱线图

要实现需求,核心是先把DataFrame中存储列表的list1列展开为长格式数据——Seaborn的箱线图需要每个数值对应单独一行的结构,无法直接处理列表类型的列。具体步骤如下:

1. 数据预处理

先将索引转为单独列,再把list1列的列表拆分成多行:

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

# 生成原始DataFrame
df = pd.DataFrame({'info':['1a','1b','1a','1b','1a','1b'],'list1': np.random.randint(0, 10, (6,15)).tolist()},index=list('AABBCC'))

# 重置索引为单独列,并展开list1的列表元素
df_expanded = df.reset_index(names='group')  # 把原索引命名为group列
df_expanded = df_expanded.explode('list1', ignore_index=True)  # 将列表拆分为多行
df_expanded['list1'] = df_expanded['list1'].astype(int)  # 确保数值类型正确

2. 绘制箱线图

使用Seaborn的boxplot或boxenplot,指定x为原索引分组(A/B/C),y为展开后的数值,hue为info列,同时设置图表尺寸:

# 设置图表尺寸,替换X/Y为你需要的数值
plt.figure(figsize=(10, 6))

# 绘制箱线图,dodge=True让同组的两个箱线图相邻不重叠
sns.boxplot(data=df_expanded, x='group', y='list1', hue='info', dodge=True)

# 自定义图表标签
plt.title('分组箱线图(按原索引A/B/C分组)')
plt.xlabel('分组(原索引)')
plt.ylabel('list1数值')

# 显示图例和图表
plt.legend(title='info')
plt.show()

关键说明

  • explode('list1'):把每个列表中的元素拆成单独一行,同时保留对应的group和info标签,让Seaborn能正确对每个分组下的不同info类别做统计。
  • 若要使用boxenplot,直接把sns.boxplot替换为sns.boxenplot即可,参数完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:45:12