我想知道如何计算特定数据框中列表中唯一单词的数量。
例如,假设我有一个列表 = ['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
如何计算数据集中任何行的任何给定句子中的唯一名称?
答案 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.split
、explode
和 value_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