count值在dataframe列中出现的频率

2024-04-19 01:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集

|category|
cat a
cat b
cat a

我希望能够返回类似的内容(显示独特的值和频率)

category | freq |
cat a       2
cat b       1

Tags: 数据内容cat频率freqcategory
3条回答

使用groupbycount

In [37]:
df = pd.DataFrame({'a':list('abssbab')})
df.groupby('a').count()

Out[37]:

   a
a   
a  2
b  3
s  2

[3 rows x 1 columns]

查看联机文档:http://pandas.pydata.org/pandas-docs/stable/groupby.html

还有^{}正如@DSM所评论的,这里有很多剥猫皮的方法

In [38]:
df['a'].value_counts()

Out[38]:

b    3
a    2
s    2
dtype: int64

如果要将频率添加回原始数据帧,请使用transform返回对齐的索引:

In [41]:
df['freq'] = df.groupby('a')['a'].transform('count')
df

Out[41]:

   a freq
0  a    2
1  b    3
2  s    2
3  s    2
4  b    3
5  a    2
6  b    3

[7 rows x 2 columns]
df.category.value_counts()

这一小行代码将为您提供所需的输出。

如果列名中有空格,则可以使用

df['category'].value_counts()

如果要应用于所有可以使用的列:

df.apply(pd.value_counts)

这将对每个列应用基于列的聚合函数(在本例中为值计数)。

相关问题 更多 >