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

如何基于字典中的语言技能要求筛选长格式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

解决方案

你之前的代码仅完成了"掌握所有必需语言"的筛选,还需补充技能等级校验,可按以下步骤实现:

方法一:分步实现

  1. 筛选技能达标的语言记录
    先匹配每条记录对应的最低技能要求,再筛选出技能达标的行:

    # 将语言要求转为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']]
    
  2. 筛选掌握所有要求语言的候选人
    对达标记录按候选人分组,检查是否覆盖全部要求语言:

    valid_candidates = qualified_records.groupby('candidate')['language'].apply(
        lambda x: set(lang_requirements.index).issubset(x)
    )
    # 提取有效候选人名单
    valid_candidates = valid_candidates[valid_candidates].index
    
  3. 生成最终结果
    从达标记录中筛选出有效候选人的行,并移除辅助列:

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:15:39