鉴于大熊猫系列代表一个值的频率,我怎样才能将这些频率转换为百分比?

时间:2013-01-11 15:58:31

标签: python pandas

我正在尝试使用kaggle.com泰坦尼克号数据集(泰坦尼克号上每个人的数据)并想出了这样的性别分类:

gender = df.sex.value_counts()
gender

male   577
female 314 

我想了解泰坦尼克号上每个性别的百分比。

我的方法略逊于理想:

from __future__ import division
pcts = gender / gender.sum()
pcts

male      0.647587
female    0.352413

有更好的(更惯用的)方法吗?

谢谢!

4 个答案:

答案 0 :(得分:94)

这个函数在pandas中实现,实际上甚至在value_counts()中实现。无需计算:)

只需输入:

df.sex.value_counts(normalize=True)

给出了所需的输出。

请注意,value_counts()会排除NA值,因此数字最多可能不等于1。 见这里:http://pandas-docs.github.io/pandas-docs-travis/generated/pandas.Series.value_counts.html (DataFrame的一列是系列)

答案 1 :(得分:11)

我想我可能会一次性完成这项工作(不进口部门):

1. * df.sex.value_counts() / len(df.sex)

或者也许,记住你想要一个百分比:

100. * df.sex.value_counts() / len(df.sex)

真的很多,你的方式看起来也很好。

答案 2 :(得分:4)

如果要将计数与百分比合并,可以使用:

c = df.sex.value_counts(dropna=False)
p = df.sex.value_counts(dropna=False, normalize=True)
pd.concat([c,p], axis=1, keys=['counts', '%'])

答案 3 :(得分:0)

我知道这是一篇过时的文章,但是我希望这个答案将来能对某人有所帮助。 如果您希望显示百分比,可以做的一件事情是使用@fanfabbb回答的value_counts(normalize=True)

话虽如此,出于多种目的,您可能希望以百分之一的比例显示它。这样可以实现

gender = df.sex.value_counts(normalize=True).mul(100).round(1).astype(str) + '%'

在这种情况下,我们将结果乘以100,将其四舍五入到小数点后再加上百分号。

希望它会有所帮助:)