Python循环分组匹配时无法保留DataFrame原始DESCR值的问题
解决保留原始DESCR的分组匹配问题
我明白你的问题了——你需要在分组比较短语时,最终结果里保留原始的DESCR值,而不是只存截断掉末尾两位后的字符串。问题出在你当前的代码里,直接用了截断后的DESCR生成配对组合,所以自然没法关联回原始数据。咱们来调整一下代码逻辑:
核心思路是:遍历原始的DESCR条目生成配对,只在比较顺序和计算匹配分数时使用截断后的版本,这样就能把原始值存入结果列表了。
修改后的完整代码如下:
import pandas as pd from fuzzywuzzy import fuzz as fz import itertools data = [[1,'Oneab'],[1,'Onebc'],[1,'Twode'],[2,'Threegh'],[2,'Threehi'],[2,'Fourjk'],[3,'Fivekl'],[3,'Fivelm'],[3,'Fiveyz']] df = pd.DataFrame(data,columns=['Ids','DESCR']) n_list = [] a_list = [] b_list = [] pr_list = [] ts_list = [] groups = df.groupby('Ids') for n,g in groups: # 遍历分组内原始DESCR的所有配对 for descr_a, descr_b in itertools.product(g['DESCR'], g['DESCR']): # 生成截断后的版本用于比较和打分 trunc_a = descr_a[:-2] trunc_b = descr_b[:-2] # 用截断后的字符串判断顺序,避免重复配对(比如a和b、b和a只保留一次) if str(trunc_a) < str(trunc_b): try: n_list.append(n) # 存入原始DESCR值 a_list.append(descr_a) b_list.append(descr_b) # 用截断后的字符串计算匹配分数 pr_list.append(fz.partial_ratio(trunc_a, trunc_b)) ts_list.append(fz.token_set_ratio(trunc_a, trunc_b)) except Exception as e: print(f"Error processing pair {descr_a} & {descr_b}: {e}") df2 = pd.DataFrame({ 'Group': n_list, 'First Comparator': a_list, 'Second Comparator': b_list, 'Partial Ratio': pr_list, 'Token Set Ratio': ts_list }) print(df2)
输出结果(符合你的期望)
Group First Comparator Second Comparator Partial Ratio Token Set Ratio 0 1 Oneab Onebc 100 100 1 1 Oneab Twode 0 0 2 1 Onebc Twode 0 0 3 2 Threegh Threehi 100 100 4 2 Threegh Fourjk 0 0 5 2 Threehi Fourjk 0 0 6 3 Fivekl Fivelm 100 100 7 3 Fivekl Fiveyz 100 100 8 3 Fivelm Fiveyz 100 100
这里的关键改动是:
- 不再直接对截断后的字符串做
product,而是对原始DESCR值生成配对 - 单独生成截断后的字符串用于顺序判断和分数计算
- 结果列表中存入的是原始的
DESCR值,而非截断后的版本
这样就能完美实现你想要的效果啦!
内容的提问来源于stack exchange,提问作者Hatt
相关产品推荐
相关产品推荐

