当前位置: 首页 > 知识库问答 >
问题:

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

曾永新
2023-03-14

我在试验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

有更好(更地道)的方法吗?

共有3个答案

何华灿
2023-03-14

如果您希望显示百分比,您可以使用@fanfabb回答的value\u计数(normalize=True)

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

可以这样实现:

gender = df.sex.value_counts(normalize=True).mul(100).round(1).astype(str) + '%'

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

包修贤
2023-03-14

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

c = df.sex.value_counts(dropna=False)
p = df.sex.value_counts(dropna=False, normalize=True)
pd.concat([c,p], axis=1, keys=['counts', '%'])
徐洛华
2023-03-14

此函数在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 (数据帧的一列是一个系列)

 类似资料:
  • 我有一个数据帧,我想按Col1 Col2 Col3分组,得到值列的0频率:df= 我如何应用groupby来实现 非常感谢。

  • 问题内容: 我有一个测试成绩的频率表: 我想显示基本统计数据和箱图,该图由频率表汇总。(例如,上面示例的平均值为79.16,中位数为80。) 熊猫有办法做到这一点吗?我所看到的所有示例均假设有个别案例的表格。 我想我可以生成一个个人分数列表,像这样- -但我希望避免这种情况;真实的非玩具数据集中的总频率高达十亿。 任何帮助表示赞赏。 (我认为这与对带加权数据使用describe()的问题不同,后者

  • 问题内容: 当天最后一个新手熊猫问题:如何为单个系列生成一张桌子? 例如: 大量的搜索使我进入了Series.describe()和pandas.crosstabs,但是这些都不满足我的需要:一个变量,按类别计数。哦,如果它适用于不同的数据类型(字符串,整数等),那就太好了。 问题答案: 也许吧?

  • 我有一个类似下面的系列, 我想根据list(explode)中的值将此单个系列转换为dataframe。 预期产出: 我试过了 我上面的代码可以完成这项工作,尽管我正在寻找解决这个问题的好方法。

  • 问题内容: 将列表/元组转换为dict的最佳方法是什么,其中键是列表的不同值,而值是这些不同值的频率? 换一种说法: (我不得不多次执行上述操作,标准库中是否有适合您的内容?) 编辑: Jacob Gabrielson指出2.7 / 3.1分支的标准库中有一些内容 问题答案: 有点儿 通常效果很好。

  • 问题内容: 如何将BufferedImages数组转换为视频?我正在制作屏幕录像机。 之后我该如何压缩视频? 问题答案: 您可以使用Xuggler(在Windows,Mac或Linux上)执行此操作,以下教程将向您确切演示如何执行此操作。特别是,请参阅(我不是在开玩笑的)“如何成长球”教程,该程序可以从一系列BufferedImages(和一些音频)中提取视频。