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

如何匹配员工地址与办公地点并提取employee_id与location?

解决Pandas模糊匹配办公地点与员工地址的问题

现有两个Pandas DataFrame:
办公地点数据:

import pandas as pd

office = pd.DataFrame({'office_id': [1,2,3],
                    'location': ['Denver','Sacramento','Phoenix']})

员工数据(注意修正原代码中employee_id的格式,需改为字符串):

employee = pd.DataFrame({'employee_id': ['A1','B3','C2','D2'],
                       'name':['Anthony','Benjamin','Charles','Daniel'],
                    'address': ['123, Sacramento, California','Denver456, Colorado','Phoenix, Arizona','789 Dover']})  

需求是从员工地址中匹配对应的办公地点,提取符合条件的employee_id和location,预期结果如下:

employee_id  location
A1           Sacramento
B3           Denver
C2           Phoenix

解决方案

你之前的代码仅判断了地址是否包含办公地点,但未提取具体匹配的地点,以下两种方法可以解决这个问题:

方法一:使用apply自定义匹配函数

先提取办公地点列表,再通过自定义函数遍历地址,返回匹配的地点:

# 获取所有办公地点
office_locs = office['location'].tolist()

# 定义函数:从地址中提取匹配的办公地点
def match_location(address):
    for loc in office_locs:
        if loc in address:
            return loc
    return None

# 给employee新增匹配到的办公地点列
employee['location'] = employee['address'].apply(match_location)

# 过滤掉未匹配的记录,提取目标列
result = employee[employee['location'].notna()][['employee_id', 'location']]

方法二:使用正则表达式str.extract(更简洁)

将办公地点拼接成正则匹配模式,直接从地址中提取匹配项:

# 拼接正则匹配模式:匹配任意一个办公地点
loc_pattern = '|'.join(office['location'])

# 从地址中提取匹配的办公地点
employee['location'] = employee['address'].str.extract(f'({loc_pattern})', expand=False)

# 过滤并提取结果
result = employee[employee['location'].notna()][['employee_id', 'location']]

执行上述任意一种方法后,result就是你需要的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:15:34