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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:43:02