pandas中按另一列分组选取DataFrame某列前X%最高值的方法
无逐行循环的优雅实现方案
你的需求本质是为col2的每个分类(A/B/C)取组内col1值最高的1条记录,完全不需要写循环逐行跟踪取值,用pandas内置的分组操作就能高效实现。
核心实现代码
df = DataFrame(data = {"col1": [9,8,7,6,5,4,3,2,1], "col2": ["A","A","C","A","C","B","C","B","A"]}) # 先按col1降序排列,再按col2分组取每组首条记录 result = df.sort_values("col1", ascending=False).groupby("col2").head(1)
实际输出匹配度
运行代码后得到的结果行索引恰好为0、2、5,和预期完全对齐:
- 分类A取到组内最高值9,对应原行索引0
- 分类C取到组内最高值7,对应原行索引2
- 分类B取到组内最高值4,对应原行索引5
取数总条数为3,刚好对应你要求的col1最高33%的行数规模。
方案特点
- 无Python层逐行循环,全程是pandas底层优化过的向量化操作,数据量较大时性能远好于手写循环
- 逻辑简洁无冗余,后续维护时不需要额外注释就能看懂取数规则
- 自动规避重复取值问题,保证每个col2分类恰好出现在结果中一次
内容的提问来源于stack exchange,提问作者Mace
相关产品推荐
相关产品推荐

