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

如何用Pandas的groupby按type分组取growth前3行并按type调用

嘿,这需求太常见了,我来给你捋清楚怎么用pandas的groupby搞定,分两种场景来说,适配不同的需求:

一、先生成所有组的Top3记录,再按需调用指定Type

如果需要先把每个type的前3高growth记录都存下来,之后随时调用任意type的结果,这么做最方便:

首先,用groupby结合nlargest来快速筛选每组的Top3,这方法比手动循环高效多了,特别适合大数据量:

import pandas as pd

# 假设你的原始数据框叫df,包含type和growth字段
top3_all_types = df.groupby('type', group_keys=False).apply(lambda x: x.nlargest(3, 'growth'))
# 重置索引,去掉groupby带来的层级索引,变成常规数据框
top3_all_types = top3_all_types.reset_index(drop=True)

加group_keys=False是为了避免结果里多出不必要的分组索引列,让输出更干净。

之后要调用指定type(比如type=32)的结果,直接用布尔索引就行:

# 获取type=32的Top3记录
type32_top3 = top3_all_types[top3_all_types['type'] == 32]
二、直接从groupby对象中提取指定Type的Top3

如果只是偶尔查某个特定type的Top3,不想处理所有组(毕竟数据量大的话,全量处理会耗资源),可以直接操作groupby对象:

# 先创建分组对象
grouped_df = df.groupby('type')

# 提取type=32的分组,再筛选growth最高的3条
type32_top3 = grouped_df.get_group(32).nlargest(3, 'growth')

get_group()方法可以直接从分组对象中取出指定组的所有数据,再用nlargest筛选Top3,这样只处理你需要的组,效率更高。

小细节补充
  • 如果遇到多个记录growth值相同的情况,nlargest默认会保留先出现的3条;要是想保留所有并列的Top记录,可以加参数keep='all',比如x.nlargest(3, 'growth', keep='all'),不过这样结果可能会超过3条,根据实际需求调整就行。
  • 大数据量下,优先用上面两种方法,pandas内部做了优化,比自己写循环快很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:08:36