我有这个字符串列表:
list = ['a.xxx', 'b.yyy', 'c.zzz', 'a.yyy', 'b.xxx', 'a.www']
我想用item.split('。')[0]计算出现的项目。
必要条件:
a 3
b 2
c 1
答案 0 :(得分:3)
<强> 设置 强>
我不喜欢分配内置类的变量名
l = ['a.xxx', 'b.yyy', 'c.zzz', 'a.yyy', 'b.xxx', 'a.www']
选项1
pd.value_counts(pd.Series(l).str.split('.').str[0])
选项2
pd.value_counts([x.split('.', 1)[0] for x in l])
选项3
在Counter
pd.Series
pd.Series(Counter([x.split('.', 1)[0] for x in l]))
选项4
pd.Series(l).apply(lambda x: x.split('.', 1)[0]).value_counts()
选项5
使用find
pd.value_counts([x[:x.find('.')] for x in l])
所有收益
a 3
b 2
c 1
dtype: int64
答案 1 :(得分:1)
首先,list
不是一个好的变量名,因为你会影响内置列表。我不太了解pandas
,但由于这里不需要,我还是会发布一个答案。
>>> from collections import Counter
>>> l = ['a.xxx', 'b.yyy', 'c.zzz', 'a.yyy', 'b.xxx', 'a.www']
>>> Counter(x.split('.', 1)[0] for x in l)
Counter({'a': 3, 'b': 2, 'c': 1})
答案 2 :(得分:1)
我会从集合中尝试Counter类。它是dict的子类,并为您提供一个字典,其中的值对应于每种键的观察数量:
a = ['a.xxx', 'b.yyy', 'c.zzz', 'a.yyy', 'b.xxx', 'a.www']
from collections import Counter
Counter([item.split(".")[0] for item in a])
给出
Counter({'a': 3, 'b': 2, 'c': 1})
这是你需要的