给定一个代表值频率的熊猫系列,我如何将这些频率转换为百分比?

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。谢谢海登。

以上是关于给定一个代表值频率的熊猫系列,我如何将这些频率转换为百分比?的主要内容,如果未能解决你的问题,请参考以下文章

将分布拟合到 R 中的给定频率值

如何将列表中的值分配给熊猫数据框并控制每个列表元素在数据框中的分布/频率

如何在熊猫数据框中查找列的 ngram 频率?

如何以年份为频率创建熊猫 DatetimeIndex?

sktime ARIMA 无效频率

如何在熊猫数据框列中获取 NaN 观察的频率 [重复]