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

多列Groupby后筛选Top N数据并绘制Seaborn图表

解决方案

步骤1:准备数据与导入库

先导入所需工具库,并构造示例数据集:

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

# 构造示例数据集
data = {
    'Data1': ['A','A','A','B','B','B','C','C','C','D','D','D','E','E','E','F','F','F'],
    'Data2': ['x','y','z','y','z','u','x','y','v','v','y','z','t','u','x','s','s','r'],
    'Value': [6,7,8,3,4,5,6,7,8,4,5,7,8,7,6,4,5,6]
}
df = pd.DataFrame(data)

步骤2:筛选Top3的Data1分组

方式1:按聚合指标取Top3(以Value总和为例)

如果你需要按每组的Value总和、最大值等指标筛选Top3,可执行以下代码:

# 计算每个Data1的Value总和,降序排序后取前3个Data1
top3_data1 = df.groupby('Data1')['Value'].sum().sort_values(ascending=False).head(3).index

# 过滤原数据集,保留Top3的Data1记录
filtered_df = df[df['Data1'].isin(top3_data1)]

方式2:按Data1的顺序取前3(匹配示例期望结果)

如果只需保留Data1字母顺序的前3组(A、B、C),直接执行:

top3_data1 = df['Data1'].unique()[:3]
filtered_df = df[df['Data1'].isin(top3_data1)]

步骤3:用Seaborn绘制图表

分组条形图(展示各Data1下不同Data2的Value)

plt.figure(figsize=(10,6))
sns.barplot(data=filtered_df, x='Data1', y='Value', hue='Data2')
plt.title('Top3 Data1分组的Value分布')
plt.show()

箱线图(展示Top3 Data1的Value分布特征)

plt.figure(figsize=(10,6))
sns.boxplot(data=filtered_df, x='Data1', y='Value')
plt.title('Top3 Data1的Value分布箱线图')
plt.show()

验证结果

按方式2执行后,filtered_df的结果与你期望一致:

Data1Data2Value
Ax6
Ay7
Az8
By3
Bz4
Bu5
Cx6
Cy7
Cv8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:25:22