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

如何在Pandas DataFrame中按组保留优先级最高的选择行?

处理Pandas分组后保留指定优先级最高行的问题

需求说明

现有包含Group和Choice列的Pandas DataFrame,需按Group分组后,仅保留每组中优先级最高的Choice行。优先级顺序为:First Choice > Second Choice > Third Choice > Fourth Choice。由于数据规模较大,需要可扩展的高效解决方案。

示例输入

Group   Choice
Group1  First Choice
Group1  Second Choice
Group1  Third Choice
Group2  Third Choice
Group2  Fourth Choice
Group3  Second Choice
Group3  Fourth Choice

期望输出

Group   Choice
Group1  First Choice
Group2  Third Choice
Group3  Second Choice 

可复现代码

import pandas as pd

d = {'Group': ['Group1', 'Group1', 'Group1', 'Group2', 'Group2', 'Group3', 'Group3'], 
     'Choice': ['First Choice', 'Second Choice', 'Third Choice', 'Third Choice', 'Fourth Choice', 'Second Choice', 'Fourth Choice']}
df = pd.DataFrame(data=d)

高效解决方案

利用Pandas的分类类型(Categorical)指定自定义排序优先级,结合分组操作实现高效筛选,该方法适合大规模数据集:

步骤1:定义优先级并转换列类型

将Choice列转换为有序分类类型,指定优先级顺序,这样排序时会遵循自定义规则而非默认字典序:

priority_order = ['First Choice', 'Second Choice', 'Third Choice', 'Fourth Choice']
df['Choice'] = pd.Categorical(df['Choice'], categories=priority_order, ordered=True)

步骤2:分组筛选最高优先级行

按Group分组后,直接取每组中Choice优先级最高的行(由于分类类型已定义顺序,idxmin()会返回优先级最高的行索引,因为优先级越高的分类值越小):

result = df.loc[df.groupby('Group')['Choice'].idxmin()]

验证结果

执行上述代码后,打印result即可得到期望输出:

print(result)

输出:

Group          Choice
0  Group1   First Choice
3  Group2    Third Choice
5  Group3  Second Choice

方案优势

  • 效率高:分类类型的排序和分组操作均为Pandas内部优化的矢量化操作,处理大规模数据时性能远优于循环或自定义函数
  • 可扩展性:若后续需要调整优先级,只需修改priority_order列表即可,无需改动核心逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:02:17