如何在Pandas中提取数据库有但工人未掌握的工人-技能对
生成工人未掌握技能的解决方案
数据预处理说明
先统一表的结构(若你的表是宽格式,需转成标准长格式):
- 技能数据库表:最终转为单技能列的长表,包含所有技能的唯一值
- 工人技能配对表:保持工人+技能的长表结构,每行记录一个工人掌握的一项技能
代码实现(Pandas)
import pandas as pd # 替换为你的实际数据 # 技能数据库表(示例宽表转长表) skills_wide = pd.DataFrame({ 'skill1': ['Python'], 'skill2': ['SQL'], 'skill3': ['Java'], 'skill4': ['Excel'] }) all_skills = skills_wide.melt(value_name='skill')['skill'].drop_duplicates() # 工人已掌握技能表(示例) worker_skills = pd.DataFrame({ 'worker': ['worker1', 'worker1', 'worker2', 'worker3'], 'skill': ['Python', 'SQL', 'Java', 'Excel'] }) # 生成所有工人-技能的全量配对 all_workers = worker_skills['worker'].drop_duplicates() all_possible_pairs = pd.merge(all_workers, all_skills, how='cross') # 筛选未掌握的技能 unmastered = all_possible_pairs.merge( worker_skills, on=['worker', 'skill'], how='left', indicator=True ).query("_merge == 'left_only'").drop(columns='_merge') print(unmastered)
核心逻辑
- 用
melt转换宽格式技能表,确保所有技能集中在同一列,避免分散处理的误差 how='cross'生成笛卡尔积,得到所有工人与所有技能的组合,从根源上避免漏项- 左连接后通过
_merge标识筛选未匹配项,完全解决重复问题,无论工人数量多少都能稳定运行
内容的提问来源于stack exchange,提问作者A Sm
相关产品推荐
相关产品推荐

