Python 给定一个表示某个值的频率的系列,如何将这些频率转换为百分比?

Python 给定一个表示某个值的频率的系列,如何将这些频率转换为百分比?,python,pandas,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 有更好(

我在试验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
有更好(更地道)的方法吗


谢谢

我想我可能会一次性完成这项工作(无需导入部门):

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

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

实际上,您的方式看起来也很好。

此函数在pandas中实现,实际上甚至在value\u counts()中也实现了。无需计算:)

仅键入:

df.sex.value_counts(normalize=True)
这正好提供了所需的输出

请注意,value_counts()不包括NA值,因此数字加起来可能不等于1。 请看这里:
(数据帧的一列是一个系列)

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

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

我知道这是一个老帖子,但我希望这个答案能对将来的人有所帮助。 如果您希望显示百分比,您可以使用@fanfabb上面回答的
value\u计数(normalize=True)

尽管如此,出于许多目的,您可能希望以百分之一百的百分比来显示它。这是可以做到的

gender = df.sex.value_counts(normalize=True).mul(100).round(1).astype(str) + '%'
在这种情况下,我们将结果乘以100,四舍五入到小数点后一位,然后加上百分号


希望它能有所帮助:)

我喜欢这种方法,因为未来不需要导入。谢谢海登。任何东西都可以给出如下
男性577 0.647587女性314 0.352413
可以同时显示、计数和pctcnts??应该有一个选项可以自动显示!
gender = df.sex.value_counts(normalize=True).mul(100).round(1).astype(str) + '%'