为了账号安全,请及时绑定邮箱和手机立即绑定

使用 SequenceMatcher 比较 pandas 中两列中的字符串

使用 SequenceMatcher 比较 pandas 中两列中的字符串

繁华开满天机 2023-05-16 14:47:13
我正在尝试确定熊猫数据框中两列的相似性:Text1                                                                             AllPerformance results achieved by the approaches submitted to this Challenge.       The six top approaches and three others outperform the strong baseline.Accuracy is one of the basic principles of perfectionist.                             Where am I?我想比较'Performance results ... 'with'The six...'和 ' Accuracy is one...'with 'Where am I?'。第一行应该有较高的两列之间的相似度,因为它包含一些词;第二个应该等于 0,因为两列之间没有共同的单词。要比较我使用的两列,SequenceMatcher如下所示:from difflib import SequenceMatcherratio = SequenceMatcher(None, df.Text1, df.All).ratio()但是 . 的使用似乎是错误的df.Text1, df.All。你能告诉我为什么吗?
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

  • SequenceMatcher不是为熊猫系列设计的。

  • 你可以.apply的功能。

  • SequenceMatcher例子

    • 偶数空格isjunk=None不被认为是垃圾。

    • Withisjunk=lambda y: y == " "将空格视为垃圾。

from difflib import SequenceMatcher

import pandas as pd


data = {'Text1': ['Performance results achieved by the approaches submitted to this Challenge.', 'Accuracy is one of the basic principles of perfectionist.'],

        'All': ['The six top approaches and three others outperform the strong baseline.', 'Where am I?']}


df = pd.DataFrame(data)


# isjunk=lambda y: y == " "

df['ratio'] = df[['Text1', 'All']].apply(lambda x: SequenceMatcher(lambda y: y == " ", x[0], x[1]).ratio(), axis=1)


# display(df)

                                                                         Text1                                                                      All     ratio

0  Performance results achieved by the approaches submitted to this Challenge.  The six top approaches and three others outperform the strong baseline.  0.356164

1                    Accuracy is one of the basic principles of perfectionist.                                                              Where am I?  0.088235


# isjunk=None

df['ratio'] = df[['Text1', 'All']].apply(lambda x: SequenceMatcher(None, x[0], x[1]).ratio(), axis=1)


# display(df)

                                                                         Text1                                                                      All     ratio

0  Performance results achieved by the approaches submitted to this Challenge.  The six top approaches and three others outperform the strong baseline.  0.410959

1                    Accuracy is one of the basic principles of perfectionist.                                                              Where am I?  0.117647



查看完整回答
反对 回复 2023-05-16
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信