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

如何在Python Pandas中按分组取最高分数对应职位并新增列?

解决方案

你可以通过Pandas的分组操作实现这个需求,以下是两种简洁的实现方式:

方法一:使用groupby + idxmax + map

先定位每个分组中最高分对应的Job type,再映射到原DataFrame的每一行:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'person': ['person 1', 'person 1', 'person 2', 'person 2', 'person 2'],
    'score': [6.5, 4.3, 1.2, 3.4, 4.3],
    'Job type': ['job 1', 'job 2', 'job 1', 'job 2', 'job 3']
})

# 获取每个person对应的最高分Job type
highest_job_map = df.loc[
    df.groupby('person')['score'].idxmax(), 
    ['person', 'Job type']
].set_index('person')['Job type']

# 新增目标列
df['Highest score'] = df['person'].map(highest_job_map)

说明

  • df.groupby('person')['score'].idxmax() 返回每个person分组中,score值最大的行索引
  • 通过loc提取这些行的person和Job type,转换为以person为索引的Series,方便后续映射
  • 最后用map将每个person对应的最高Job type匹配到原DataFrame的所有行

方法二:使用sort_values + groupby.transform

先按分数降序排序,再取每个分组的第一个Job type并广播到组内所有行:

import pandas as pd

df = pd.DataFrame({
    'person': ['person 1', 'person 1', 'person 2', 'person 2', 'person 2'],
    'score': [6.5, 4.3, 1.2, 3.4, 4.3],
    'Job type': ['job 1', 'job 2', 'job 1', 'job 2', 'job 3']
})

# 按分数降序排序,分组后取每组第一个Job type并广播
df['Highest score'] = df.sort_values('score', ascending=False)\
                        .groupby('person')['Job type']\
                        .transform('first')

说明

  • sort_values('score', ascending=False) 把每个person的行按分数从高到低排序
  • groupby('person')['Job type'].transform('first') 将每个分组的第一个Job type(即最高分对应的)填充到该组的所有行中

最终结果

两种方法都会得到你期望的输出:

personscoreJob typeHighest score
person 16.5job 1job 1
person 14.3job 2job 1
person 21.2job 1job 3
person 23.4job 2job 3
person 24.3job 3job 3

注:如果同一个person存在多个相同的最高分,上述方法会取最先出现的那个Job type;若需处理这种情况,可以根据需求调整逻辑(比如取所有符合条件的Job type用逗号分隔)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:10:33