Как найти соотношение в ряду панд для групповой функции - PullRequest
0 голосов
/ 24 июня 2018

Я использовал groupby, чтобы сгруппировать набор данных по профессиям и полу.Теперь я хочу найти соотношение между мужчинами и женщинами для каждого занятия.Я не могу думать о том, как действовать.

enter image description here

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Может быть, довольно поздно на вечеринку, но вот то, что я считаю точным ответом:

# create pivot
male_ratio = users.pivot_table(index='occupation', columns='gender', aggfunc='size', fill_value=0)

# calculate male ratio
sums = male_ratio[['F', 'M']].sum(axis=1)
male_ratio['MaleRatio'] = round(100 * male_ratio['M'] / sums , 1)

# result
male_ratio['MaleRatio']

occupation
administrator     54.4
artist            53.6
doctor           100.0
educator          72.6
engineer          97.0
entertainment     88.9
executive         90.6
healthcare        31.2
homemaker         14.3
lawyer            83.3
librarian         43.1
marketing         61.5
none              55.6
other             65.7
programmer        90.9
retired           92.9
salesman          75.0
scientist         90.3
student           69.4
technician        96.3
writer            57.8
Name: MaleRatio, dtype: float64
0 голосов
/ 24 июня 2018

Вот один из способов использования pandas.pivot_table и векторизованных вычислений Панд. Обратите внимание, что этот метод избавляет от необходимости выполнять отдельный groupby.

df = pd.DataFrame([['A', 'F'], ['A', 'F'], ['A', 'M'], ['B', 'M'], ['B', 'M'], ['B', 'F'],
                   ['C', 'M'], ['C', 'M'], ['D', 'F']], columns=['Occupation', 'Gender'])

# pivot input dataframe
res = df.pivot_table(index='Occupation', columns='Gender', aggfunc='size', fill_value=0)

# calculate ratios
sums = res[['F', 'M']].sum(axis=1)
res['FemaleRatio'] = res['F'] / sums
res['MaleRatio'] = res['M'] / sums

print(res)

Gender      F  M  FemaleRatio  MaleRatio
Occupation                              
A           2  1     0.666667   0.333333
B           1  2     0.333333   0.666667
C           0  2     0.000000   1.000000
D           1  0     1.000000   0.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...