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

如何基于CTC获取各公司薪资Top2岗位?现有代码存困惑

解决方案

你的代码逻辑是提取每个公司下各岗位的最高薪资记录,但要实现「每家公司薪资最高的前2个岗位」,需要调整分组排序逻辑,以下是几种实用方法:

场景1:每个公司取岗位最高薪资排名前2的岗位(每个岗位仅保留最高薪资记录)

先聚合每个公司+岗位的最高薪资,再按公司对薪资降序筛选前2:

# 1. 先得到每个公司每个岗位的最高薪资
job_max_ctc = df23.groupby(['company_name', 'job_position'], as_index=False)['ctc'].max()

# 2. 按公司分组,取每组薪资最高的2个岗位
top2_jobs_per_company = job_max_ctc.groupby('company_name').apply(
    lambda x: x.nlargest(2, 'ctc')
).reset_index(drop=True)

场景2:每个公司取所有记录中薪资前2的记录(同岗位可有多条高薪资记录)

如果不需要先聚合岗位薪资,直接从全量数据中按公司取薪资前2的记录:

top2_records_per_company = df23.groupby('company_name').apply(
    lambda x: x.nlargest(2, 'ctc')
).reset_index(drop=True)

处理并列排名的灵活方案

如果需要处理薪资并列的情况(比如多个岗位薪资同为第二),可以用rank函数:

# 给每个公司内的薪资降序排名,method参数控制并列处理逻辑(min/mean/dense等)
df23['ctc_rank'] = df23.groupby('company_name')['ctc'].rank(method='min', ascending=False)

# 筛选排名前2的记录
top2_jobs = df23[df23['ctc_rank'] <= 2].reset_index(drop=True)

注意事项

你之前的代码中存在键不匹配的问题:groupby用的是company_name,但merge用的是company_hash,这会导致数据匹配失败,需要保持分组和关联的键一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:01:27