Я хочу рассчитать процент, но все, что я получаю, это сумма в pandas фрейме данных - PullRequest
0 голосов
/ 14 января 2020

Я хочу рассчитать процент, но все, что я получаю, это сумма. Пожалуйста, помогите мне получить процентное значение в ячейках, а не в python в pandas фрейме данных.

Код:

ds_data = data[(data.JobTitle == 'Data Analyst') | (data.JobTitle == 'Data Engineer')  | (data.JobTitle == 'Data Scientist')]
agg_func = {'Education':{'Masters': lambda x: \
    sum(i == 'Masters' for i in x),
    'Bachelor': lambda x : sum(i == 'Bachelors (4 years)' for i in x),
    'None': lambda x : sum(i == 'None (no degree completed)' for i in x),
    'Doctorates': lambda x : sum(i == 'Doctorate/PhD' for i in x),
    'Associates': lambda x : sum(i == 'Associates (2 years)' for i in x)}}
function = ds_data.groupby(['JobTitle']).agg(agg_func).reset_index()
function.columns = function.columns.droplevel(0)
function

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Если мы используем переименование dict (которое устарело), ​​можно вычислить общее количество строк, а затем использовать его в лямбда-функциях для получения процента:

ds_data = data[(data.JobTitle == 'Data Analyst') | (data.JobTitle == 'Data Engineer') 
               | (data.JobTitle == 'Data Scientist')]
ds_data_nrows = ds_data.shape[0]
agg_func = {'Education':{'Masters': lambda x: \
    (sum(i == 'Masters' for i in x) / ds_data_nrows) * 100,
    'Bachelor': lambda x : (sum(i == 'Bachelors (4 years)' for i in x) / ds_data_nrows) * 100,
    'None': lambda x : (sum(i == 'None (no degree completed)' for i in x) / ds_data_nrows) * 100,
    'Doctorates': lambda x : (sum(i == 'Doctorate/PhD' for i in x) / ds_data_nrows) * 100,
    'Associates': lambda x : (sum(i == 'Associates (2 years)' for i in x) / ds_data_nrows) * 100}}
function = ds_data.groupby(['JobTitle']).agg(agg_func).reset_index()
function.columns = function.columns.droplevel(0)
function
0 голосов
/ 14 января 2020

Я взял на себя смелость определить функцию, содержащую математику, поскольку она чище, чем копирование / вставка кода.

Чтобы получить процент, вам нужно разделить на общее число или длина списка.

def calc_percentage(data, degree):
  return (sum(i == degree for i in x) / len(x)) * 100

agg_func = {
    'Education': {
        'Masters': lambda x : calc_percentage(x, 'Masters'),
        'Bachelor': lambda x : calc_percentage(x, 'Bachelors (4 years)'),
        'None': lambda x : calc_percentage(x, 'None (no degree completed)'),
        'Doctorates': lambda x : calc_percentage(x, 'Doctorate/PhD'),
        'Associates': lambda x : calc_percentage(x, 'Associates (2 years)')
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...