计算值在数据框列中出现的频率

新手上路,请多包涵

我有一个数据集

category
cat a
cat b
cat a

我希望能够返回类似的东西(显示唯一值和频率)

 category   freq
cat a       2
cat b       1

原文由 yoshiserry 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 295
2 个回答

使用 value_counts() @DSM 评论。

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

Out[37]:

b    3
a    2
s    2
dtype: int64

还有 groupbycount 。这里有很多给猫剥皮的方法。

 In [38]:
df.groupby('a').count()

Out[38]:

   a
a
a  2
b  3
s  2

[3 rows x 1 columns]

请参阅 联机文档

如果您想将频率添加回原始数据帧,请使用 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]

原文由 EdChum 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 df.apply(pd.value_counts)

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

原文由 Arran Cudbard-Bell 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题