如何合并df_information与补充岗位组合表,实现用户对应全岗位组合?
需求描述
我有两个DataFrame:
- df_information:记录用户信息,包含
id_user、job_function、job_area、title字段,数据如下:
| id_user | job_function | job_area | title |
|---|---|---|---|
| 1123 | Compensation / Benefit Policy | Human Resources | personnel |
| 1124 | HR Systems Administration | Human Resources | personnel |
| 1124 | Cyber Security / Information Security | IT / Computers / Electronic | personnel |
| 1125 | Equipment | Manufacturing / Production / Operations | manager |
| 1602 | Product Development | IT / Computers / Electronics | director |
- df_all_possible_job_function_job_area:存储各
title在df_information中未涵盖的job_function与job_area组合,包含job_function、job_area、title字段,数据如下:
| job_function | job_area | title |
|---|---|---|
| ASIC / Layout Design | TwoIT / Computers / Electronics | director |
| Accounting | Finance / Accounting | personnel |
| Accounts Payable | Finance / Accounting | personnel |
| Account Management | Customer Support / Client Services | personnel |
需要将两个DataFrame合并,要求每个id_user对应其title下的所有job_function、job_area组合(包含原表及补充表中的组合),预期修正后结果如下:
| id_user | job_function | job_area | title |
|---|---|---|---|
| 1123 | Compensation / Benefit Policy | Human Resources | personnel |
| 1123 | Accounting | Finance / Accounting | personnel |
| 1123 | Accounts Payable | Finance / Accounting | personnel |
| 1123 | Account Management | Customer Support / Client Services | personnel |
| 1124 | HR Systems Administration | Human Resources | personnel |
| 1124 | Cyber Security / Information Security | IT / Computers / Electronic | personnel |
| 1124 | Accounting | Finance / Accounting | personnel |
| 1124 | Accounts Payable | Finance / Accounting | personnel |
| 1124 | Account Management | Customer Support / Client Services | personnel |
| 1125 | Equipment | Manufacturing / Production / Operations | manager |
| 1602 | Product Development | IT / Computers / Electronics | director |
| 1602 | ASIC / Layout Design | TwoIT / Computers / Electronics | director |
(注:原预期结果中存在重复的Accounting记录,属于输入笔误,此处已修正)
解决方案
可通过提取用户-title唯一映射、关联补充表生成组合、合并原表与补充记录三步实现:
import pandas as pd # 1. 获取用户与title的唯一对应关系,避免同一用户重复关联补充组合 user_title_unique = df_information[['id_user', 'title']].drop_duplicates() # 2. 将用户-title映射与补充表按title关联,生成用户对应的补充组合记录 supplement_records = pd.merge(user_title_unique, df_all_possible_job_function_job_area, on='title', how='inner') # 3. 合并原表和补充记录,得到最终结果 final_result = pd.concat([df_information, supplement_records], ignore_index=True) # 可选:按id_user排序让结果更规整 final_result = final_result.sort_values('id_user').reset_index(drop=True) print(final_result)
逻辑说明
- 去重用户-title映射:解决原表中同一用户多条记录的问题,确保每个用户仅对应自身title一次,避免后续生成重复的补充组合。
- 关联补充表:通过
merge按title匹配,让每个用户获取对应title下的所有补充job_function+job_area组合。 - 合并记录:用
concat将原用户记录和新生成的补充记录合并,得到包含所有组合的最终DataFrame。
内容的提问来源于stack exchange,提问作者Rus Zzzeta
相关产品推荐
相关产品推荐

