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

基于自定义重复判定规则的Pandas数据合并实现问询

解决方案:自定义重复规则的Pandas数据合并

前置依赖

先安装所需工具库:

pip install python-Levenshtein networkx

完整实现代码

import pandas as pd
import Levenshtein
import networkx as nx

# 加载数据(替换成你的CSV读取代码:pd.read_csv("your_file.csv"))
data = {
    'English': ["'hello'", "'helo'", "'hello'", "'hallo'"],
    'Spanish': ["'hola'", "'hola'", "'hola_a'", "'a_aureola'"],
    'Count': [23, 2, 1, 1],
    'AF': [0, 1, 0, 1]
}
df = pd.DataFrame(data)

# 实现自定义重复项判定逻辑
def is_duplicate(row1, row2, edit_dist_threshold=1):
    # 去除文本中的引号,方便后续处理
    eng1 = row1['English'].strip("'")
    eng2 = row2['English'].strip("'")
    spa1 = row1['Spanish'].strip("'")
    spa2 = row2['Spanish'].strip("'")
    
    # 规则1:English编辑距离达标 + Spanish完全匹配
    if spa1 == spa2 and Levenshtein.distance(eng1, eng2) < edit_dist_threshold:
        return True
    # 规则2:English完全匹配 + Spanish拆分后有交集
    elif eng1 == eng2:
        spa_parts1 = set(spa1.split('_'))
        spa_parts2 = set(spa2.split('_'))
        if len(spa_parts1 & spa_parts2) > 0:
            return True
    # 规则3:其余情况不判定为重复
    return False

# 用图结构处理传递性重复(比如行0和1重复、行0和2重复,则三行同属一组)
G = nx.Graph()
G.add_nodes_from(df.index)

# 遍历行对,标记重复关联
for i in df.index:
    for j in df.index[i+1:]:
        if is_duplicate(df.loc[i], df.loc[j]):
            G.add_edge(i, j)

# 生成分组映射:把同一连通分量的行归为一组
group_mapping = {}
for group_id, nodes in enumerate(nx.connected_components(G)):
    for node in nodes:
        group_mapping[node] = group_id

df['group_id'] = df.index.map(group_mapping)

# 分组聚合:保留每组首行的前两列,其余数值列求和
result = df.groupby('group_id').agg(
    English=('English', 'first'),
    Spanish=('Spanish', 'first'),
    **{col: (col, 'sum') for col in df.columns if col not in ['English', 'Spanish', 'group_id']}
).reset_index(drop=True)

print(result)

代码说明

  1. 重复判定:严格对应你给出的三条规则,编辑距离阈值可根据实际需求调整。
  2. 连通分量分组:解决了重复关系的传递性问题,避免遗漏关联行,比单纯两两遍历合并更高效准确。
  3. 聚合逻辑:完全按照要求保留每组第一行的语言列,其余数值列自动求和。

输出结果

English     Spanish  Count  AF
0  'hello'      'hola'     26   1
1  'hallo'  'a_aureola'      1   1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:22:44