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

使用FuzzyWuzzy模糊去重时生成多余列的问题求助

解决模糊去重后新增多余列的问题

问题分析

你使用的dedupe_FuzzyWuzzy.deduplication函数返回结果时自动添加了Matches和Combined列,不符合仅保留原CSV列、每组模糊重复数据只留首行的需求。以下两种方案可解决该问题:

方案一:处理现有函数返回结果

若仍想依赖dedupe_FuzzyWuzzy库,只需在得到结果后筛选原始列,并确保仅保留每组模糊重复的首行:

import pandas as pd
from dedupe_FuzzyWuzzy import deduplication

# 读取原始数据并完成精确去重
df = pd.read_csv('/path/input.csv')
df = df.drop_duplicates(subset='text', keep='first').reset_index(drop=True)

# 执行模糊去重
df_final = deduplication.deduplication(df, ['text'], threshold=90)

# 1. 移除多余列,仅保留原始数据的列
df_final = df_final[df.columns]

# 2. 若函数仅标记匹配组未自动去重,按分组列保留首行(示例用'Cluster ID',需替换为实际分组列名)
# 可先打印df_final.columns查看实际分组列
if 'Cluster ID' in df_final.columns:
    df_final = df_final.groupby('Cluster ID').first().reset_index(drop=True)

# 保存最终结果
df_final.to_csv('/path/deduplicated.csv', index=False)

方案二:手动实现模糊去重(无多余列)

若想完全控制输出结构,直接用fuzzywuzzy手动实现去重逻辑:

import pandas as pd
from fuzzywuzzy import fuzz, process

# 读取原始数据并完成精确去重
df = pd.read_csv('/path/input.csv')
df = df.drop_duplicates(subset='text', keep='first').reset_index(drop=True)

keep_indices = []
processed_rows = set()

# 遍历每行,匹配度≥90%的归为一组,仅保留组内首行
for idx, current_text in enumerate(df['text']):
    if idx not in processed_rows:
        keep_indices.append(idx)
        # 查找所有匹配度达标的文本
        matches = process.extract(current_text, df['text'], scorer=fuzz.ratio, limit=None)
        # 收集匹配项的索引并标记为已处理
        match_indices = [df[df['text'] == match[0]].index[0] for match in matches if match[1] >= 90]
        processed_rows.update(match_indices)

# 筛选需要保留的行
df_final = df.loc[keep_indices]

# 保存去重后的CSV
df_final.to_csv('/path/deduplicated.csv', index=False)

说明

  • 方案一适配现有库的使用场景,需注意确认deduplication函数返回的分组列名称。
  • 方案二更灵活,完全自定义去重逻辑,确保输出仅包含原始列且严格保留每组首行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:58:12