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

Pandas如何提取各Topic下Weight最高的行并保留Topic与Word列

问题分析

你原有代码存在两个核心问题:

  1. 分组逻辑错误:你的需求是筛选每个Topic下权重最高的行,所以groupby的分组键应该是Topic而非不存在的Weightage列
  2. 语法错误:groupby对象后直接调用方法即可,你写的groupby('Weightage')(['Topic','Word'])不符合pandas语法规范

正确实现方案

两种常用实现方式都会完整保留所有原始列信息,不需要额外处理Topic列:

方案1:排序+去重(可读性最高,适合同Topic下有多个相同最高权重的场景,默认保留第一条)

import pandas as pd

# 构造测试DataFrame
details = {
    'Topic' : [0,0,0,0,
               1,1,1,
               3,3,3,
               4,4],
    'Word' : ['a', 'c', 'p', 'm', 
              'ad', 'a', 'p',
              's', 'm', 'rev',
              'rev', 'in'],
    'Weight' : [0.5,0.2,0.1,0.05,
                   0.2,0.1,0.06,
                   0.2,0.1,0.09,
                   0.2,0.1]
}
df = pd.DataFrame(details)

# 核心逻辑:按Topic升序、Weight降序排序后,去重保留每个Topic的第一条记录
df_sorted = df.sort_values(['Topic', 'Weight'], ascending=[True, False])
result = df_sorted.drop_duplicates('Topic', keep='first').reset_index(drop=True)
print(result)

方案2:groupby+idxmax(性能更高,适合无重复最高权重的场景)

# 核心逻辑:取每个Topic下Weight最大值对应的行索引,直接筛选整行数据
max_idx = df.groupby('Topic')['Weight'].idxmax()
result = df.loc[max_idx].reset_index(drop=True)
print(result)

输出结果

两种方案得到的结果一致:

Topic Word  Weight
0      0    a    0.50
1      1   ad    0.20
2      3    s    0.20
3      4  rev    0.20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:02