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

如何利用pandas Series中的机构信息匹配两个DataFrame?

问题:基于机构信息匹配两个DataFrame的最优结果

数据结构说明

df1(待匹配的目标数据)

first_namelast_nameaffiliation
jeandulacUniversity of Texas
peterhutaUniversity of Maryland

df2(包含潜在匹配项的数据源)

first_namelast_nameaffiliations_all
jeandulac[{'city_name': 'Kyoto', 'country_name': 'Japan', 'name': 'Kyoto University'}]
jeandulac[{'city_name': 'Texas', 'country_name': 'USA', 'name': 'University of Texas'}]

其中affiliations_all列是包含机构字典的列表,类型为pandas.core.series.Series,无法修改原始结构。

需求

通过机构信息区分df2中的潜在匹配项,为df1中的每条记录保留最可能的匹配结果。你的思路是:先清理df1的affiliation列(已实现),再对df2的affiliations_all列执行相同清理,最后判断匹配关系。

实现步骤及代码

1. 定义统一的机构名称清理函数

先写一个通用函数,移除无关词汇(如"university"、"of"),统一文本格式,确保df1和df2的清理规则一致:

import pandas as pd

def clean_affiliation(text):
    # 转小写、拆分词汇、移除停用词、重新拼接
    stop_words = {'university', 'of', 'the'}
    words = text.lower().split()
    cleaned_words = [word for word in words if word not in stop_words]
    return ' '.join(cleaned_words).strip()

2. 处理df1的机构列(你已实现,此处做确认)

df1['cleaned_affiliation'] = df1['affiliation'].apply(clean_affiliation)

3. 处理df2的affiliations_all列

遍历每个列表中的机构字典,提取name字段并应用清理函数,生成清理后的机构列表:

def process_affiliations(aff_list):
    # 遍历列表中的每个机构字典,提取名称并清理
    cleaned_affs = [clean_affiliation(aff['name']) for aff in aff_list]
    return cleaned_affs

df2['cleaned_affiliations'] = df2['affiliations_all'].apply(process_affiliations)

4. 合并数据并判断匹配

先按姓名合并两个DataFrame,再检查df1的清理后机构是否存在于df2的清理后机构列表中:

# 按姓名合并,得到所有潜在匹配对
merged_df = pd.merge(df1, df2, on=['first_name', 'last_name'], how='left')

# 判断是否匹配
merged_df['is_match'] = merged_df.apply(
    lambda x: x['cleaned_affiliation'] in x['cleaned_affiliations'],
    axis=1
)

5. 筛选最优匹配结果

# 筛选匹配成功的记录
matched_results = merged_df[merged_df['is_match']]

# 若需每个姓名仅保留一条匹配结果(取第一条)
final_results = matched_results.groupby(['first_name', 'last_name']).first().reset_index()

这样就能精准匹配到符合机构信息的结果,避免原始字符串匹配的误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:10:40