给定一个代表值频率的熊猫系列,我如何将这些频率转换为百分比?
Posted
技术标签:
【中文标题】给定一个代表值频率的熊猫系列,我如何将这些频率转换为百分比?【英文标题】:Given a pandas Series that represents frequencies of a value, how can I turn those frequencies into percentages? 【发布时间】:2021-12-05 09:33:07 【问题描述】:我正在尝试使用 kaggle.com 的泰坦尼克号数据集(泰坦尼克号上每个人的数据)并得出这样的性别分类:
df = pd.DataFrame('sex': ['male'] * 577 + ['female'] * 314)
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
有没有更好(更惯用)的方式?
【问题讨论】:
【参考方案1】:这个函数在 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的一列是一个Series)
【讨论】:
下面给出male 577 0.647587 female 314 0.352413
的任何东西都可以并排计数和pctcnts ??【参考方案2】:
如果您希望显示百分比,您可能会做的事情之一是将value_counts(normalize=True)
用作answered by @fanfabbb。
话虽如此,出于多种目的,您可能希望以百分之一的形式显示它。
可以这样实现:
gender = df.sex.value_counts(normalize=True).mul(100).round(1).astype(str) + '%'
在这种情况下,我们将multiply 的结果以百为单位,round 保留一位小数并添加百分号。
【讨论】:
【参考方案3】:如果你想用百分比合并计数,可以使用:
c = df.sex.value_counts(dropna=False)
p = df.sex.value_counts(dropna=False, normalize=True)
pd.concat([c,p], axis=1, keys=['counts', '%'])
【讨论】:
应该有一个自动显示的选项!【参考方案4】:我想我可能会一口气做到这一点(不导入部门):
1. * df.sex.value_counts() / len(df.sex)
或者,记住你想要一个百分比:
100. * df.sex.value_counts() / len(df.sex)
真的很多,你的方式看起来也不错。
【讨论】:
我喜欢这种方法,因为不需要导入 future。谢谢海登。以上是关于给定一个代表值频率的熊猫系列,我如何将这些频率转换为百分比?的主要内容,如果未能解决你的问题,请参考以下文章