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

Tim*_*art 46 python pandas

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

gender = df.sex.value_counts()
gender

male   577
female 314 
Run Code Online (Sandbox Code Playgroud)

我想知道泰坦尼克号上每个性别的百分比.

我的方法略逊于理想:

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

male      0.647587
female    0.352413
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

fan*_*bbb 111

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

只需输入:

df.sex.value_counts(normalize=True)
Run Code Online (Sandbox Code Playgroud)

它给出了所需的输出.

请注意,value_counts()不包括NA值,因此数字可能不等于1.请参见此处:http://pandas-docs.github.io/pandas-docs-travis/generated/pandas.Series.value_counts.html ( DataFrame的一列是Series)

  • 任何给出如下`男性 577 0.647587 女性 314 0.352413` 的东西都可以,并排计数和 pcnts ? (5认同)

小智 16

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

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

  • 确实应该有一个选项来自动显示它! (4认同)

And*_*den 14

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

1. * df.sex.value_counts() / len(df.sex)
Run Code Online (Sandbox Code Playgroud)

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

100. * df.sex.value_counts() / len(df.sex)
Run Code Online (Sandbox Code Playgroud)

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


Sha*_*har 11

我知道这是一个旧帖子,但我希望这个答案将来会对某人有所帮助。如果您希望显示您可能做的事情的百分比,请使用value_counts(normalize=True)@fanfabbb 上面的回答。

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

gender = df.sex.value_counts(normalize=True).mul(100).round(1).astype(str) + '%'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们将结果乘以百,四舍五入到一位小数并加上百分号。

希望它可以帮助:)