#python #pandas #function #dataframe #analysis
#python #pandas #функция #фрейм данных #анализ
Вопрос:
Я пытаюсь рассчитать процент групп с доходами, которые находятся в долгу, по сравнению с общим количеством людей в этих группах доходов (в долг = 1, без долга = 0) Я также пробовал метод groupby(), но не смог заставить его работать. Это то, что я набрал:
import pandas as pd
import numpy as np
credit_scoring = pd.read_csv('/datasets/credit_scoring_eng.csv')
in_debt = credit_scoring[credit_scoring['debt'] == 1]['income_group'].value_counts()
total = credit_scoring['income_group'].value_counts()
print(in_debt)
print(total)
def percentage_of_debt(incomegroup):
calc = in_debt / total * 100
return calc
credit_scoring.groupby('income_group')['debt'].apply(percentage_of_debt)
Результат показывает правильные проценты, но он также снова группирует результат по группам доходов:
< 20000 608
25000 - 29999 409
>= 35000 290
20000 - 24999 288
30000 - 34999 146
Name: income_group, dtype: int64
< 20000 7369
25000 - 29999 4856
>= 35000 4071
20000 - 24999 3378
30000 - 34999 1851
Name: income_group, dtype: int64
income_group
20000 - 24999 < 20000 8.250780
25000 - 29999 8.422570
>= 35000 7.123557
20000 - 24999 8.525755
30000 - 34999 7.887628
...
>= 35000 < 20000 8.250780
25000 - 29999 8.422570
>= 35000 7.123557
20000 - 24999 8.525755
30000 - 34999 7.887628
Name: debt, Length: 25, dtype: float64
Я хотел бы, чтобы вывод отображал:
< 20000 8.250780
25000 - 29999 8.422570
20000 - 24999 8.525755
30000 - 34999 7.887628
>= 35000 7.123557
Ценю все предложения и рекомендации!
Ответ №1:
без базовой таблицы это немного сложно, но я думаю, что то, что вы хотите, это
credit_scoring.groupby("income_group").agg(lambda df: 100 * df['debt'].sum() / df['debt'].count()).sort_index()
Это то, что вам нужно?