python - 在列表中的 pandas 列中查找关键字匹配项的数量

标签 python python-3.x pandas nlp nltk

我有一个 pandas 数据框,如下所示:

Type        Keywords 
----        --------
Animal      [Pigeon, Bird, Raccoon, Dog, Cat]
Pet         [Dog, Cat, Hamster]
Pest        [Rat, Mouse, Raccoon, Pigeon]
Farm        [Chicken, Horse, Cow, Sheep]
Predator    [Wolf, Fox, Raccoon]

假设我有以下字符串:

input = "There is a dead rat and raccoon in my pool"

考虑到我将字符串标记化并删除停用词,使其变为

input = [Dead, Rat, Raccoon, Pool]

我需要遍历每一行并找到关键字匹配次数最多的行。对于给定的示例,结果如下所示:

Type        Keywords                            Matches
----        --------                            -------
Animal      [Pigeon, Bird, Raccoon, Dog, Cat]   1
Pet         [Dog, Cat, Hamster]                 0
Pest        [Rat, Mouse, Raccoon, Pigeon]       2
Farm        [Chicken, Horse, Cow, Sheep]        0
Predator    [Wolf, Fox, Raccoon]                1

输出将是匹配次数最多的前三个类型名称。

在上述情况下,由于“Pest”类别的匹配次数最多,因此它会被选为最高匹配。此外,将选择动物和捕食者类别。因此,按顺序输出将是:

output = [Pest, Animal, Predator]

使用嵌套 for 循环执行此任务很容易,但由于我有数千种此类行,因此我正在寻找更好的解决方案。 (此外,由于某种原因,我在使用非内置函数时遇到了很多错误,也许是因为矢量化?)

我查看了 pandas 中内置的 groupby 和 isin 函数,但据我所知,它们无法让我得到我想要的输出(如果我不正确,我一点也不会感到惊讶在这个假设中)。

接下来我研究了集合和散列图在 pandas 中的使用,但不幸的是,我的编码知识和当前能力还不够熟练,无法制定可靠的解决方案。 This StackOverflow link特别是让我更接近我想要的东西,尽管它没有找到前三个匹配行名称。

我将不胜感激任何帮助或建议。

最佳答案

你可以检查isin

df['Matches']=pd.DataFrame(df.Keywords.values.tolist()).isin(s).sum(1)


df.loc[df['Matches']>0,'Type'].values.tolist()

关于python - 在列表中的 pandas 列中查找关键字匹配项的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52375258/

相关文章:

python - 有没有办法计算每个月列值从 A 到 B 所花费的天数?

python - Django:在 models.py 中出错并迁移,尝试修复错误,但 django 在 models.py 中没有看到任何更改

python - 如何使用 python 在邮件正文中发送 html 内容?

python - Pandas - Groupby 或将多个数据帧剪切到垃圾箱

python:根据数据框中的位置对特定行值求和

python - 在Python 3中计算贷款的结束日期

Python:打开现有的 Excel 文件并计算工作表中的行数

python - python 格式的 flake8 (E902) TokenError

python-3.x - 如何根据替代属性选择所有元素? [美汤]

python - 如何在 python 3 中将字符串转换为字典