Подтвердить что ты не робот

Учитывая серию pandas, которая представляет частоты значения, как я могу превратить эти частоты в проценты?

Я экспериментировал с набором данных kaggle.com Titanic (данные о каждом человеке на "Титанике" ) и придумал разложение полов следующим образом:

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

Есть ли лучший (более идиоматический) способ?

Спасибо!

4b9b3361

Ответ 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 представляет собой серию)

Ответ 2

Думаю, что я, вероятно, сделаю это за один раз (без импорта подразделения):

1. * df.sex.value_counts() / len(df.sex)

или, возможно, помните, что хотите процент:

100. * df.sex.value_counts() / len(df.sex)

Большая часть мухны, на самом деле, ваш путь тоже выглядит хорошо.

Ответ 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

Я знаю, что это старый пост, но я надеюсь, что этот ответ поможет кому-то в будущем. В случае, если вы хотите показать процент, вы можете использовать value_counts(normalize=True), как ответил выше @fanfabbb.

С учетом сказанного, для многих целей, вы можете показать это в процентах от ста. это может быть достигнуто так

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

В этом случае мы умножаем результаты на сто, округляем их до одного знака после запятой и добавляем знак процента.

Надеюсь, это может помочь :)