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

如何在Pandas DataFrame中筛选各分类下销量Top2的记录?

Pandas 按分类筛选销量前2的产品

示例数据

先构造你提供的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Category': ['A','A','A','B','B','B'],
    'Products': ['abc','xyz','def','nop','hjk','qrs'],
    'Sales': [1,2,3,4,5,2]
})

需求说明

无需循环迭代,筛选出每个Category分组下Sales排名前2的Products。

解决方案

方法1:groupby + nlargest(最简便)

直接对每个分组调用nlargest提取销量前2的行:

result = df.groupby('Category').apply(lambda x: x.nlargest(2, 'Sales')).reset_index(drop=True)
  • groupby('Category'):按分类字段分组
  • nlargest(2, 'Sales'):在每个分组内取出销量最高的2条记录
  • reset_index(drop=True):重置结果索引,避免多级索引干扰

方法2:rank函数筛选

通过给每个分组内的销量排名,再筛选排名前2的记录:

# 按分组给销量降序排名,method='first'处理并列值(按出现顺序排序)
df['sales_rank'] = df.groupby('Category')['Sales'].rank(ascending=False, method='first')
# 筛选排名<=2的记录,删除辅助列
result = df[df['sales_rank'] <= 2].drop('sales_rank', axis=1)

输出结果

最终得到的result如下:

CategoryProductsSales
Adef3
Axyz2
Bhjk5
Bnop4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:17:48