如何基于字典中的语言技能要求筛选长格式Pandas DataFrame
筛选满足语言技能要求的候选人数据
给定语言技能要求字典:
request = {'languages_required': {'Python': 4, 'Java': 2}, 'other_requests': [] }
以及候选人技能的Pandas DataFrame:
import pandas as pd df = pd.DataFrame({'candidate': ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd', 'd'], 'language': ['Python', 'Java', 'Scala', 'Python', 'R', 'Python', 'Java', 'Python', 'Scala', 'Java'], 'skill': [5, 4, 4, 6, 8, 1, 3, 5, 2, 2]})
数据展示:
candidate language skill 0 a Python 5 1 a Java 4 2 a Scala 4 3 b Python 6 4 b R 8 5 c Python 1 6 c Java 3 7 d Python 5 8 d Scala 2 9 d Java 2
需要筛选出同时满足以下条件的候选人及其对应语言技能:
- 掌握
languages_required中提及的所有语言 - 对应语言的技能等级不低于字典中的要求值
期望输出:
candidate language skill 0 a Python 5 1 a Java 4 7 d Python 5 9 d Java 2
解决方案
你之前的代码仅完成了"掌握所有必需语言"的筛选,还需补充技能等级校验,可按以下步骤实现:
方法一:分步实现
筛选技能达标的语言记录
先匹配每条记录对应的最低技能要求,再筛选出技能达标的行:# 将语言要求转为Series,方便匹配 lang_requirements = pd.Series(request['languages_required']) # 先过滤出属于要求语言的记录 target_records = df[df['language'].isin(lang_requirements.index)] # 添加最低要求列并筛选技能达标行 target_records['min_skill'] = target_records['language'].map(lang_requirements) qualified_records = target_records[target_records['skill'] >= target_records['min_skill']]筛选掌握所有要求语言的候选人
对达标记录按候选人分组,检查是否覆盖全部要求语言:valid_candidates = qualified_records.groupby('candidate')['language'].apply( lambda x: set(lang_requirements.index).issubset(x) ) # 提取有效候选人名单 valid_candidates = valid_candidates[valid_candidates].index生成最终结果
从达标记录中筛选出有效候选人的行,并移除辅助列:final_result = qualified_records[qualified_records['candidate'].isin(valid_candidates)].drop(columns='min_skill') print(final_result)
方法二:简洁合并写法
lang_reqs = request['languages_required'] # 第一步:筛选技能达标的语言记录 filtered = df[ df.apply(lambda row: row['language'] in lang_reqs and row['skill'] >= lang_reqs[row['language']], axis=1) ] # 第二步:找出掌握所有要求语言的候选人 valid_candidates = filtered.groupby('candidate')['language'].apply( lambda x: set(lang_reqs.keys()).issubset(x) ) # 第三步:输出最终结果 final_result = filtered[filtered['candidate'].isin(valid_candidates[valid_candidates].index)] print(final_result)
两种方法都能得到符合要求的结果,既保证候选人掌握全部必需语言,又满足每项语言的技能等级达标。
内容的提问来源于stack exchange,提问作者Freejack
相关产品推荐
相关产品推荐

