计算一列包含某个熊猫值的次数

时间:2018-06-25 15:52:03

标签: python pandas dataframe counting

假设我的数据框如下所示:

   column_name
1  book
2  fish
3  icecream|book
4  fish
5  campfire|book

现在,如果我使用df['column_name'].value_counts(),它将告诉我fish是最常见的值。

但是,我希望返回book,因为第1、3和5行包含单词'book'。

我知道.value_counts()icecream|book识别为一个值,但是有一种方法可以通过计算每个列单元格包含某个值的次数来确定最频繁的值,因此'最频繁的值吗?

3 个答案:

答案 0 :(得分:5)

splitstack一起用于Series

a = df['column_name'].str.split('|', expand=True).stack().value_counts()
print (a)
book        3
fish        2
icecream    1
campfire    1
dtype: int64

Counter具有对列表的理解和扁平化:

from collections import Counter

a = pd.Series(Counter([y for x in df['column_name'] for y in x.split('|')]))
print (a)
book        3
fish        2
icecream    1
campfire    1
dtype: int64

答案 1 :(得分:4)

pd.value_counts

您还可以将列表传递给value_counts函数。请注意,我将join除以|,然后除以|

pd.value_counts('|'.join(df.column_name).split('|'))

book        3
fish        2
icecream    1
campfire    1
dtype: int64

get_dummies

之所以有用,是因为您的数据是用|作为分隔符来构造的。如果您使用其他分隔符,请将其传递给get_dummies调用df.column_name.str.get_dummies(sep='|').sum()

df.column_name.str.get_dummies().sum()

book        3
campfire    1
fish        2
icecream    1
dtype: int64

如果要对结果进行排序

df.column_name.str.get_dummies().sum().sort_values(ascending=False)

book        3
fish        2
icecream    1
campfire    1
dtype: int64

pd.factorizenp.bincount

请注意,我join整列并再次拆分。

f, u = pd.factorize('|'.join(df.column_name).split('|'))
pd.Series(np.bincount(f), u)

book        3
fish        2
icecream    1
campfire    1
dtype: int64

要排序,我们可以像上面一样使用sort_values。或者这个

f, u = pd.factorize('|'.join(df.column_name).split('|'))
counts = np.bincount(f)
a = counts.argsort()[::-1]
pd.Series(counts[a], u[a])

book        3
fish        2
campfire    1
icecream    1
dtype: int64

答案 2 :(得分:2)

使用collections.Counter + itertools.chain

from collections import Counter
from itertools import chain

c = Counter(chain.from_iterable(df['column_name'].str.split('|')))

res = pd.Series(c)

print(res)

book        3
campfire    1
fish        2
icecream    1
dtype: int64