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

如何在Pandas DataFrame中按不同条件筛选各组Top N主题?

高效实现不同child_group下各parent_group的TopN主题筛选

不需要拆分DataFrame,直接通过分组操作就能高效完成需求,以下是两种实用方案:

方案1:分组+自定义逻辑(直观易读)

通过groupby同时按child_groups和parent_groups分组,结合apply对每个组执行排序取TopN的操作:

# 定义每个child_group对应的TopN数量
top_n_map = {1: 2, 2: 3}

# 分组筛选:每个(child_group, parent_group)组按scores降序取前N个主题
result = df.groupby(['child_groups', 'parent_groups'], group_keys=False).apply(
    lambda x: x.sort_values('scores', ascending=False).head(top_n_map[x.name[0]])
)
  • x.name[0]获取当前分组的child_group值,从映射字典中匹配对应的TopN数量
  • group_keys=False避免结果中保留多余的分组索引

方案2:排名筛选(性能更优,适合大数据集)

利用rank进行向量化排名计算,比apply效率更高,适合处理大规模数据:

top_n_map = {1: 2, 2: 3}

# 计算每个(child_group, parent_group)组内scores的降序排名(相同分数取最小排名)
df['rank'] = df.groupby(['child_groups', 'parent_groups'])['scores'].rank(ascending=False, method='min')

# 根据child_group匹配TopN阈值,筛选符合条件的行
result = df[df['rank'] <= df['child_groups'].map(top_n_map)].drop(columns='rank')
  • 向量化操作避免了循环,处理大数据集时性能提升明显
  • method='min'确保相同分数的主题不会被错误过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:13:20