我有两个数据框——一个是数据库,另一个是实际列表。 数据库:
技能 |
---|
技能1 |
技能2 |
技能3 |
技能4 |
工人 | skills_of_worker |
---|---|
工人1 | 技能1 |
工人1 | 技能2 |
工人1 | 技能3 |
工人2 | 技能2 |
工人2 | 技能3 |
工人2 | 技能4 |
工人3 | 技能1 |
工人3 | 技能3 |
工人3 | 技能4 |
工人 | skills_they_dont_have |
---|---|
工人1 | 技能4 |
工人2 | 技能1 |
工人3 | 技能2 |
我尝试了不同的合并和删除重复项的方法,但是,由于实际的工人名单很长,技能存在重复项。
set
操作(difference
),然后explode
:
skills = {'skill1', 'skill2', 'skill3', 'skill4'}
out = (
df.groupby('worker', as_index=False)['skills_of_worker']
.agg(skills.difference)
.explode('skills_of_worker')
.rename(columns={'skills_of_worker': 'skills_they_dont_have'})
)
输出:
worker skills_they_dont_have
0 worker1 skill4
1 worker2 skill1
2 worker3 skill2