我在试验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
有更好(更地道)的方法吗?
如果您希望显示百分比,您可以使用@fanfabb回答的value\u计数(normalize=True)
。
尽管如此,出于许多目的,您可能希望以百分之一百的百分比来显示它。
可以这样实现:
gender = df.sex.value_counts(normalize=True).mul(100).round(1).astype(str) + '%'
在这种情况下,我们将结果乘以100,四舍五入到小数点后一位,然后加上百分号。
如果要将计数与百分比合并,可以使用:
c = df.sex.value_counts(dropna=False)
p = df.sex.value_counts(dropna=False, normalize=True)
pd.concat([c,p], axis=1, keys=['counts', '%'])
此函数在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分支的标准库中有一些内容 问题答案: 有点儿 通常效果很好。
我有以下布尔值表: 我想创建一个具有相同索引的新数据帧,但每行都有前一列的前三个 True 列名。 如果一行少于三个真值,则新数据帧将具有空值。