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

如何计算DataFrame中Artist_x与Artist_y列的相似度并生成新列?

计算DataFrame中两列艺术家名称的相似度

没问题,你选difflib的思路完全正确,它里面的SequenceMatcher刚好能搞定字符串相似度计算!我来帮你补全代码,还会加些实用的细节处理:

步骤1:导入必要库

先把需要的工具都引入:

import pandas as pd
from difflib import SequenceMatcher

步骤2:实现相似度计算函数

你代码里的similar函数还没定义,我们用SequenceMatcher来写这个核心逻辑——它的ratio()方法会返回0-1的相似度值,乘100就能转成百分比。另外加上空值判断,避免遇到缺失值时报错:

def similar(a, b):
    # 处理空值:只要有一个是NaN,直接返回0%相似度
    if pd.isna(a) or pd.isna(b):
        return 0.0
    # 计算相似度并转成百分比(保留两位小数更直观)
    return round(SequenceMatcher(None, str(a), str(b)).ratio() * 100, 2)

步骤3:将函数应用到DataFrame

现在就可以用你写的apply逻辑了,把函数传进去就行:

mergednew['SimilarityArtist'] = mergednew.apply(lambda row: similar(row['Artist_x'], row['Artist_y']), axis=1)

额外优化(针对大数据量)

如果你的DataFrame行数很多,普通apply速度可能偏慢,推荐用swifter库加速(先安装:pip install swifter),它会自动判断用普通apply还是向量化方式处理:

import swifter

mergednew['SimilarityArtist'] = mergednew.swifter.apply(lambda row: similar(row['Artist_x'], row['Artist_y']), axis=1)

举个测试小例子:

mergednew = pd.DataFrame({
    'Artist_x': ['Taylor Swift', 'Ed Sheeran', 'Billie Eilish'],
    'Artist_y': ['Taylor Swift', 'Ed Sheeran Jr.', 'Billie Ellish']
})

运行后SimilarityArtist列会得到:100.0, 85.71, 94.12,完全符合预期~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:40:29