Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表中的列中查找关键字匹配数_Python_Python 3.x_Pandas_Nlp_Nltk - Fatal编程技术网

Python 在列表中的列中查找关键字匹配数

Python 在列表中的列中查找关键字匹配数,python,python-3.x,pandas,nlp,nltk,Python,Python 3.x,Pandas,Nlp,Nltk,我有一个熊猫数据框,如下所示: 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, Raccoo

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

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]
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
假设我有以下字符串:

input = "There is a dead rat and raccoon in my pool"
假设我将字符串标记化并删除停止字,使其成为

input = [Dead, Rat, Raccoon, Pool]
我需要遍历每一行,找到关键字匹配数最高的行。对于给定的示例,结果如下所示:

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]
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的非内置函数时遇到了很多bug,可能是因为矢量化?)

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

接下来,我研究了集和hashmaps在pandas中的用法,但不幸的是,我的编码知识和当前的能力还不足以构建一个完整的解决方案。特别是让我更接近我想要的,尽管它没有找到前三名匹配行名称


我将非常感谢任何帮助或建议。

您可以查看
isin

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


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

在数据帧中存储和操作列表不是很有效,也就是说,我们可以在这里使用集合交集:

设置

现在使用列表理解(比应用更快):


一种简单的方法是使用应用和设置交叉点计数
out.loc[out.Matches.nlargest(3).index].Type.tolist()
['Pest', 'Animal', 'Predator']