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

稀疏矩阵构建:职位重复与or条件匹配的DataFrame处理求助

解决方案代码实现

1. 预处理职位需求:解析数字前缀与OR逻辑

先实现一个函数,把带数字前缀和OR逻辑的职位字符串转换成标准化的职位列表:

import re
import pandas as pd

def parse_position_str(pos_str):
    # 拆分OR逻辑的多个职位选项
    pos_options = [opt.strip() for opt in pos_str.split('or')]
    parsed_positions = []
    
    for opt in pos_options:
        # 提取数字前缀(如"3 Auditor"中的3)
        match = re.match(r'(\d+)\s+(.*)', opt)
        if match:
            count = int(match.group(1))
            role = match.group(2).strip()
            # 按指定次数重复职位
            parsed_positions.extend([role]*count)
        else:
            # 无数字前缀,直接加入列表
            parsed_positions.append(opt.strip())
    
    return parsed_positions

2. 展开分支的职位需求

假设你的Branch_A数据集(命名为branch_df)有一列position_list是拆分好的字典列表,每个字典包含role字段(即待处理的职位字符串)。我们将所有职位需求展开为扁平结构:

# 示例Branch_A数据
branch_df = pd.DataFrame({
    'branch_id': ['A001', 'A002'],
    'position_list': [
        [{'role': '2 Auditor or Auditor(S)'}, {'role': '1 Accountant'}],
        [{'role': '3 HR Specialist or HR Coordinator'}]
    ]
})

# 展开并解析所有职位需求
expanded_positions = []
for idx, row in branch_df.iterrows():
    for pos_dict in row['position_list']:
        parsed_roles = parse_position_str(pos_dict['role'])
        for role in parsed_roles:
            expanded_positions.append({
                'branch_id': row['branch_id'],
                'standard_role': role
            })

# 转换为结构化DataFrame
expanded_df = pd.DataFrame(expanded_positions)

3. 匹配员工数据集并构建稀疏矩阵

假设员工数据集(employee_df)包含employee_id和job_title字段,通过等价职位映射实现OR逻辑匹配,最终生成0-1稀疏矩阵:

# 示例员工数据
employee_df = pd.DataFrame({
    'employee_id': ['E001', 'E002', 'E003', 'E004', 'E005'],
    'job_title': ['Auditor', 'Auditor(S)', 'Accountant', 'HR Specialist', 'HR Coordinator']
})

# 定义OR逻辑的等价职位组,可根据需求扩展
role_mapping = {
    'Auditor': ['Auditor', 'Auditor(S)'],
    'Auditor(S)': ['Auditor', 'Auditor(S)'],
    'HR Specialist': ['HR Specialist', 'HR Coordinator'],
    'HR Coordinator': ['HR Specialist', 'HR Coordinator']
}

# 为每个员工标记所属的等价职位组
employee_df['role_group'] = employee_df['job_title'].map(lambda x: role_mapping.get(x, [x]))

# 交叉匹配分支需求与员工
matches = []
for _, branch_row in expanded_df.iterrows():
    for _, emp_row in employee_df.iterrows():
        if branch_row['standard_role'] in emp_row['role_group']:
            matches.append({
                'branch_id': branch_row['branch_id'],
                'employee_id': emp_row['employee_id'],
                'match': 1
            })

# 构建稀疏矩阵
sparse_matrix = pd.pivot_table(
    matches,
    index='branch_id',
    columns='employee_id',
    values='match',
    fill_value=0
)

关键说明

  • 数字前缀处理:通过正则提取数字,将职位按指定次数重复,保证需求数量准确。
  • OR逻辑匹配:通过role_mapping定义等价职位组,只要员工职位属于目标职位的等价组即视为匹配;若需要更灵活的模糊匹配,可将映射替换为正则匹配逻辑(如用re.search判断职位是否符合模式)。
  • 稀疏矩阵构建:利用pivot_table快速生成0-1矩阵,未匹配位置自动填充0。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:20:53