如何从熊猫数据框中计算列表中的特定单词?

时间:2021-06-26 02:19:04

标签: python pandas

我想知道如何计算特定数据框中列表中唯一单词的数量。 例如,假设我有一个列表 = ['John','Bob,'Hannah'] 接下来,我有一个数据框,其中有一列名为句子

df = 

       ['sentences']
 
0 Bob went to the shop

1 John visited Hannah

2 Hannah ate a burger

我希望输出是:

John 1

Bob 1

Hannah 2

如何计算数据集中任何行的任何给定句子中的唯一名称?

3 个答案:

答案 0 :(得分:2)

您可以使用 Series.str.contains 并调用 sum 来获取给定列中某个单词出现的次数,只需遍历所有子字符串的列表并对每个单词执行相同操作,将结果存储为字典。

list1 = ['John','Bob','Hannah']
output = {}
for word in list1:
    output[word] = df['sentences'].str.contains(word).sum()

输出:

{'John': 1, 'Bob': 1, 'Hannah': 2}

你甚至可以在字典理解中使用它:

>>> {word: df['sentences'].str.contains(word).sum() for word in list1}
{'John': 1, 'Bob': 1, 'Hannah': 2}

PS:如果一个词/子字符串在给定列的同一行中多次出现,则上述方法会将这些多次出现计为 1,如果您想在其中获得多次计数情况下,您可以为每个单元格值实现相同的逻辑

答案 1 :(得分:2)

您也可以使用 str.splitexplodevalue_counts

l = ['John', 'Bob', 'Hannah']
df.sentences.str.split().explode().value_counts()[l]

Out[239]:
John      1
Bob       1
Hannah    2
Name: sentences, dtype: int64

不过,我认为 dict comprehension 更快。

答案 2 :(得分:2)

就你而言

list1 = ['John','Bob','Hannah']
df.Col1.str.findall('|'.join(list1)).explode().value_counts()
Hannah    2
Bob       1
John      1
Name: Col1, dtype: int64