如何在DataFrame中计算多列选项与主列的字符串匹配相似度
计算DataFrame中Option列与Master列的相似度得分实现方案
数据结构示例
Row Master Option1 Option2 1 00150042 plc WAGON PLC wegin llp 2 01 telecom, ltd. 01 TELECOM LTD telecom 1 3 0404 investments limited 0404 Investments Ltd 404 Limited Investments
已有的相似度计算函数
from difflib import SequenceMatcher def similar(a, b): return SequenceMatcher(None, a, b).ratio()
实现方案
1. 手动循环遍历(你提到的思路)
这种方式逻辑直白,逐行遍历DataFrame,计算每一行的相似度得分并存入新列:
import pandas as pd # 假设你的DataFrame名为df df['Option1_score'] = 0.0 df['Option2_score'] = 0.0 for idx, row in df.iterrows(): df.loc[idx, 'Option1_score'] = similar(row['Master'], row['Option1']) df.loc[idx, 'Option2_score'] = similar(row['Master'], row['Option2'])
缺点是数据量大时效率较低,因为iterrows()是逐行处理,Python层面的循环开销大。
2. Pandas apply方法(推荐)
利用Pandas的apply方法按行批量处理,代码更简洁,效率也更高:
df['Option1_score'] = df.apply(lambda x: similar(x['Master'], x['Option1']), axis=1) df['Option2_score'] = df.apply(lambda x: similar(x['Master'], x['Option2']), axis=1)
axis=1指定按行处理,apply会自动遍历每一行,将对应列的值传入similar函数,返回结果直接作为新列的值。
3. 向量化处理(大数据量优化)
用numpy.vectorize将函数转换为向量化形式,批量处理整列数据,进一步提升效率:
import numpy as np vectorized_similar = np.vectorize(similar) df['Option1_score'] = vectorized_similar(df['Master'], df['Option1']) df['Option2_score'] = vectorized_similar(df['Master'], df['Option2'])
这种方式减少了Python层面的循环开销,在数据量较大时,运行速度会比apply更快。
总结:你最初考虑的循环遍历是可行的,但在Pandas场景下更推荐用apply或向量化的方式,既简洁又高效。
内容的提问来源于stack exchange,提问作者Raul Gonzales
相关产品推荐
相关产品推荐

