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

使用fuzzywuzzy计算pandas分组内字符串与组首字符串的相似度

实现方案

假设你使用pandas处理结构化数据集,可直接通过分组取首行参考值、批量计算相似度的逻辑实现需求,具体代码如下:

首先导入依赖库:

import pandas as pd
from fuzzywuzzy import fuzz

基础实现(小数据集适用)

# 1. 为每个unit分组生成组内共享的首行参考字符串列
df['group_ref_str'] = df.groupby('unit')['Vector_string'].transform('first')

# 2. 逐行计算当前字符串与组首参考串的相似度
df['similarity'] = df.apply(
    lambda row: fuzz.token_sort_ratio(row['Vector_string'], row['group_ref_str']),
    axis=1
)

# 3. 生成match_index字段,组首行值为0,其余行按组内顺序递增(如果不需要递增可直接统一设为0)
df['match_index'] = df.groupby('unit').cumcount()

# 可选:删除临时生成的参考串列
df.drop('group_ref_str', axis=1, inplace=True)

优化实现(大数据集适用)

如果数据量较大,逐行apply性能偏低,可通过预存分组参考值字典优化性能:

# 预存每个unit对应的首行参考字符串
unit_ref_map = df.groupby('unit')['Vector_string'].first().to_dict()

# 直接通过字典映射取参考串计算相似度
df['similarity'] = df.apply(
    lambda row: fuzz.token_sort_ratio(row['Vector_string'], unit_ref_map[row['unit']]),
    axis=1
)

df['match_index'] = df.groupby('unit').cumcount()

效果验证

上述实现中每组首行的Vector_string与参考串完全一致,因此相似度固定为100,match_index固定为0,组内其余所有行仅与本组首行比对,不会出现组内两两比对的情况,完全匹配需求。

内容的提问来源于stack exchange,提问作者Serge de Gosson de Varennes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:54:07