找到DataFrame的两个字符串列之间的相似性

PAN*_*NDA 4 python string nlp similarity pandas

我是编程新手.我有一个pandas数据框,其中有两个字符串列.

数据框如下:

Col-1             Col-2
Update            have a account
Account           account summary
AccountDTH        Cancel
Balance           Balance Summary
Credit Card       Update credit card
Run Code Online (Sandbox Code Playgroud)

在这里,我需要检查Col-2元素与Col-1的每个元素的相似性.这意味着我必须have a account与所有元素进行比较Col-1.然后找到前3个类似的.假设相似性得分为:Account(85),AccountDTH(80),Balance(60),Update(45),Credit Card(35).

预期产出是:

Col-2              Output
have a account     Account(85),AccountDTH(80),Balance(60)
Run Code Online (Sandbox Code Playgroud)

use*_*203 9

你可以使用像fuzzywuzzy这里的Python库,它支持这种类型的任务:

from fuzzywuzzy import process

df.assign(Output=[process.extract(i, df['Col-1'], limit=3) for i in df['Col-2']])
Run Code Online (Sandbox Code Playgroud)

使用该process方法,我们可以获得字符串相似的分数,然后选择前3个,如果存在3个:

上面代码的输出:

         Col-1               Col-2                                                         Output
0       Update      have a account       [(Account, 90, 1), (AccountDTH, 64, 2), (Update, 40, 0)]
1      Account     account summary  [(Account, 90, 1), (AccountDTH, 63, 2), (Credit Card, 38, 4)]
2   AccountDTH              Cancel      [(Balance, 62, 3), (Credit Card, 43, 4), (Update, 33, 0)]
3      Balance     Balance Summary      [(Balance, 90, 3), (Credit Card, 38, 4), (Update, 30, 0)]
4  Credit Card  Update credit card   [(Update, 90, 0), (Credit Card, 90, 4), (AccountDTH, 27, 2)]
Run Code Online (Sandbox Code Playgroud)

为了加快这种比较(原则上它使用Python的序列匹配器),我建议安装 python-Levenshtein