我有一个数据帧,如下所示:
names
year name
0 1990 'a', 'b', 'c'
1 2001 'a', 'd', 'c'
2 2004 'e', 'b', 'c'
我想在这样的名称中找到常见的值,
c:3, a:2, b:2, d:1, e:1
我不知道该如何处理
但我想到的是将名称列转换为列表:
names_list = name['name'].tolist()
names_list = ['a', 'b', 'c', 'a', 'd', 'c', 'e', 'b', 'c']
然后,使用我在另一篇文章中找到的以下函数来获得最常见的值:
def most_common(lst):
return max(set(lst), key=lst.count)
most_common(names_list)
'c'
它只给出了一个最常见的值,但我试图从列表中至少得到前三个值。我该怎么做?
让我们在split
和explode
之后执行mode
df.name.str.split(', ').explode().mode()
返回计数
df.name.str.split(', ').explode().value_counts() # if only would like the highest count ,
#df.name.str.split(', ').explode().value_counts().sort_values().tail(1)
如果您有
names_list = ['a', 'b', 'c', 'a', 'd', 'c', 'e', 'b', 'c']
那么您可以使用集合。计数器跟随方式:
import collections
names_list = ['a', 'b', 'c', 'a', 'd', 'c', 'e', 'b', 'c']
occurs = collections.Counter(names_list)
print(occurs)
输出:
Counter({'c': 3, 'a': 2, 'b': 2, 'e': 1, 'd': 1})
注意,collections.Counter
是dict
的子类,因此occurs
有.keys()
、.values()
、.items()
等