我想知道如何计算特定数据帧中列表中的唯一单词数。例如,假设我有一个列表=['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
如何计算数据集中任意行中任意给定句子中的唯一名称?
您可以使用Series.str.contains
并调用sum
来获取单词在给定列中的出现次数,只需在列表中迭代所有子字符串并对每个单词执行相同操作,即可将结果存储为dictionary。
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,如果你想在这种情况下获得多个计数,你可以为每个单元格值实现相同的逻辑
您也可以使用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
更快。
在您的案例中,
list1 = ['John','Bob','Hannah']
df.Col1.str.findall('|'.join(list1)).explode().value_counts()
Hannah 2
Bob 1
John 1
Name: Col1, dtype: int64