如何在pandas DataFrame中标记相似单元格值并新增分类列
Pandas相似文本分组打标实现
你可以直接通过遍历+相似度匹配的方式实现分类标记,不需要引入额外第三方库,写法简洁符合Python编码规范,具体实现如下:
完整代码
import numpy as np import pandas as pd from difflib import SequenceMatcher # 原始DataFrame构造 d = {'Feature': ["Sales Acct.", "Director", "Sales Acc.","Manager","Direct.", "Miner"]} df = pd.DataFrame(data=d) def similar(a, b): return SequenceMatcher(None, a, b).ratio() # 初始化分类列,先填充空值 df['Category'] = np.nan current_category = 1 match_threshold = 0.5 for idx in df.index: # 已分配分类的行直接跳过 if not pd.isna(df.loc[idx, 'Category']): continue # 取当前未分类的文本作为分组基准 base_text = df.loc[idx, 'Feature'] df.loc[idx, 'Category'] = current_category # 遍历剩余未分类文本,匹配相似度达标的归为同一组 for check_idx in df.index[df['Category'].isna()]: check_text = df.loc[check_idx, 'Feature'] if similar(base_text, check_text) > match_threshold: df.loc[check_idx, 'Category'] = current_category current_category += 1 # 分类列转为整数类型 df['Category'] = df['Category'].astype(int)
运行结果
执行print(df)即可得到你期望的输出:
Feature Category 0 Sales Acct. 1 1 Director 2 2 Sales Acc. 1 3 Manager 3 4 Direct. 2 5 Miner 4
说明
- 相似度阈值
match_threshold可根据实际业务需求调整,数值越高匹配要求越严格 - 逻辑上以首次出现的未分类文本为分组基准,不会出现重复分组问题,适用于十万行以内的文本匹配场景
- 如果对匹配准确率要求更高,可以在计算相似度前增加预处理步骤:统一文本大小写、去除标点符号、去除多余空格后再计算比值
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

