Python pandas:按项目子字符串对字符串列表中的项目出现

时间:2017-04-20 15:51:08

标签: python pandas

我有这个字符串列表:

list = ['a.xxx', 'b.yyy', 'c.zzz', 'a.yyy', 'b.xxx', 'a.www']

我想用item.split('。')[0]计算出现的项目。

必要条件:

a 3
b 2
c 1

3 个答案:

答案 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})

这是你需要的