我正在尝试使用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
有更好的(更惯用的)方法吗?
谢谢!
答案 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,将其四舍五入到小数点后再加上百分号。
希望它会有所帮助:)