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

如何使用Pandas groupby筛选各品类销售额Top5产品

现有代码的典型错误
  • 库名拼写错误:将pandas错写为panda,导入时会直接触发模块不存在的报错
  • 读文件的参数格式错误:Excel文件名作为字符串参数,需要用引号包裹,直接写product.xlsx会被识别为未定义的变量
  • 核心逻辑偏差:当前代码是将全表聚合后的销售额做全局排序取前5,无法实现每个品类下单独筛选销售额Top5的需求;同时聚合后生成的Series不存在名为sum的列,执行sort_values(by='sum')会触发KeyError
可直接运行的正确实现代码
  1. 基础导入与文件读取
import pandas as pd
# 替换为本地实际的Excel文件路径
sales_df = pd.read_excel("product.xlsx")
  1. 按品类、产品维度聚合总销售额
# 计算单品类下每个产品的累计销售额
cat_prod_sales = sales_df.groupby(["Category", "Product"], as_index=False)["Sale"].sum()
cat_prod_sales = cat_prod_sales.rename(columns={"Sale": "total_sales"})
  1. 组内排名并筛选Top5
# 按品类分组,对组内销售额做降序排名,遇到并列销售额时按出现顺序固定排名,避免并列导致的数量偏差
cat_prod_sales["cat_rank"] = cat_prod_sales.groupby("Category")["total_sales"].rank(
    ascending=False, 
    method="first"
)
# 筛选每个品类下排名前5的产品
top5_each_category = cat_prod_sales[cat_prod_sales["cat_rank"] <= 5].sort_values(
    by=["Category", "cat_rank"]
)

效果说明:最终输出的结果会按品类分组展示,每个品类下的产品按销售额从高到低排列,每个品类最多展示5条产品记录,不会出现单品类挤占全局Top5名额的问题。如果需要将销售额并列的产品全部纳入排名,可以将rank方法的method参数改为min,适配不同的统计规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 00:24:04