Python中如何在pandas DataFrame新增列匹配含公共三字母组的名称
实现方案
优先采用「预构建三字母映射表 + 自定义函数批量查询」的方案,比逐行嵌套循环对比的效率高至少一个数量级,数据量越大优势越明显。
步骤说明
- 先全局遍历一次所有数据,构建三字母组 -> 对应名称列表的映射字典,每个三字母组关联所有包含它的名称
- 对每一行,直接查询该行所有三字母组对应的名称列表,合并去重后排除当前行自身的名称,就是目标列需要填充的内容
实现代码
import pandas as pd from collections import defaultdict # 构建三字母组映射字典 tri_char_map = defaultdict(list) for _, row in df.iterrows(): name = row['Unnamed: 0'] for tri_char in row['Characters Split']: tri_char_map[tri_char].append(name) # 定义获取公共三字母名称的自定义函数 def fetch_related_names(row): current_name = row['Unnamed: 0'] related_names = [] for tri_char in row['Characters Split']: related_names.extend(tri_char_map[tri_char]) # 去重并排除自身名称 unique_related = list(set(related_names)) if current_name in unique_related: unique_related.remove(current_name) return unique_related # 批量填充目标列 df['Names with common 3-letters'] = df.apply(fetch_related_names, axis=1)
效果验证
以第一行数据为例,拆分三字母组为FRO、KDU、WJU,其中FRO关联的名称有FROKDUWJU、FROIEUSKIKIR、ORIUWJZSRFRO,最终第一行目标列填充结果为['FROIEUSKIKIR', 'ORIUWJZSRFRO'],符合需求。
内容的提问来源于stack exchange,提问作者hbstha123
相关产品推荐
相关产品推荐

