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

Python大数据场景下Top10分类值聚合统计绘图求助

问题根因

你的代码无法实现预期效果有两个核心问题:

  1. 调用sort_values()后没有将排序、取TopN的结果赋值给独立变量,链式调用执行完后结果没有被保存,无法作为绘图数据源
  2. 全量3000个唯一Store值直接传入绘图接口,x轴分类过多会导致刻度标签完全重叠,不具备业务可读性
可直接运行的实现方案

核心逻辑是先完成分组聚合、筛选TopN分类值,再传入绘图接口,同时通过order参数固定柱子排序规则,和参考统计图表样式对齐。

  • 聚合计算采用pandas向量化操作,6万行规模数据处理耗时低于100ms,适配大数据量EDA场景
  • 绘图阶段仅传入10个分类值,从根源避免x轴拥挤问题
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 读取数据
df = pd.read_csv('train_feature_store.csv')

# 分组聚合Size总和,排序后取Top10门店,结果赋值保存
# 需要Top5时将head(10)改为head(5)即可
store_size_topn = df[['Size', 'Store']]\
    .groupby('Store', as_index=False)\
    .sum()\
    .sort_values(by='Size', ascending=False)\
    .head(10)

# 绘图基础配置
sns.set_style("whitegrid")
plt.figure(figsize=(12, 6))

# 绘制条形图,order参数固定x轴顺序为Size降序,避免自动按Store名称排序
ax = sns.barplot(
    data=store_size_topn,
    x='Store',
    y='Size',
    order=store_size_topn['Store'],
    palette='viridis'
)

# 图表可读性优化
plt.title('Top10门店Size总和统计', fontsize=14, pad=20)
plt.xlabel('门店ID', fontsize=12)
plt.ylabel('Size累计值', fontsize=12)
# 柱子顶部添加数值标签
for patch in ax.patches:
    val = patch.get_height()
    ax.text(
        patch.get_x() + patch.get_width()/2,
        val + store_size_topn['Size'].max()*0.01,
        f'{int(val)}',
        ha='center', fontsize=10
    )
plt.xticks(rotation=45)
sns.despine()
plt.tight_layout()
plt.show()

扩展:绘制TopN门店出现频次计数图

如果你需要的是统计门店记录数的countplot,不需要提前聚合,直接取频次TopN的门店列表传入order参数即可:

# 取记录数Top10的门店
topn_store_count = df['Store'].value_counts().head(10).index

plt.figure(figsize=(12,6))
ax = sns.countplot(
    data=df,
    x='Store',
    order=topn_store_count,
    palette='viridis'
)
# 标签、刻度优化逻辑和上述代码一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:19:05