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

如何基于含列表值的DataFrame绘制箱线图并聚合同索引数据

解决方案

步骤1:预处理数据

首先要把相同index对应的distribution列表合并,再转换成适合绘图的长格式:

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

# 你的原始数据
data = [
    [12, [0.1, 0.2, 0.3, 0.4, 0.5]],
    [14, [0.8, 0.7, 0.6, 0.4, 0.2]],
    [12, [0.05, 0.25, 0.35]]  # 模拟相同index的额外数据
]
df = pd.DataFrame(data, columns=['index', 'distribution'])

# 合并相同index的所有distribution列表
merged_df = df.groupby('index')['distribution'].apply(
    lambda groups: [num for sublist in groups for num in sublist]
).reset_index()

# 将列表拆分为每行一个数值的长格式(绘图需要)
plot_df = merged_df.explode('distribution', ignore_index=True)
plot_df['distribution'] = plot_df['distribution'].astype(float)  # 确保数值类型正确

步骤2:绘制箱线图

用seaborn的箱线图函数,直接按index分组展示分布:

plt.figure(figsize=(8, 6))
sns.boxplot(x='index', y='distribution', data=plot_df)

# 添加标题和标签
plt.title('各Index对应的Distribution分布箱线图')
plt.xlabel('Index')
plt.ylabel('Distribution数值')

plt.show()

说明

  • 分组合并阶段:通过groupby把相同index的行聚合,再用lambda函数把所有子列表拼接成一个大列表,保证同一index的所有数据都被整合。
  • 拆分行阶段:explode方法把列表中的每个元素单独拆成一行,这样绘图库能识别每个数值对应的分组。
  • 箱线图会自动展示每个index分组的中位数、四分位数、须线范围,以及超出须线的异常值,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:31:13