如何基于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
相关产品推荐
相关产品推荐

