Округление значений столбцов до ближайших 10, затем показывается процент каждой группы, удовлетворяющей условию - PullRequest
1 голос
/ 30 апреля 2020
df = pd.DataFrame({'Credit Scores':[695 ,704, 718], 'Delinquent': [True, False, True]})
df.head()

Новичок Работа с pandas dataFrames

Итак, я создал dataFrame, который включает в себя кредитный рейтинг заемщиков при выдаче кредита и вопрос о том, был ли кредит получен правонарушитель. Я надеюсь сгруппировать оценки вместе, округлив их слишком близко к 10 (т. Е. «Кредитные баллы»: 700, 710, 720 и т. Д. 1031 *), а затем найдя процент оценок в каждой группе, которая стала просроченной. Пример вывода может выглядеть следующим образом.

  Credit Score  Delinquency Rate
0      700           .43
1      710           .45
2      720           .41

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

Обновление

У меня возникла другая проблема

#round and group credit scores by 10's
df['Credit Score'] = round(df['Credit Score'], -1)

# group by credit score and sum the bool values divided by the size of each group
to_rate = df.groupby(round(df['Credit Score'], -1))['Delinquency Rate']

df['Delinquency Rate'] = to_rate.transform(sum) / to_rate.transform('size')

df.sort_values('Credit Score')

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

    Credit Score    Delinquency Rate
54       450                1.0
17       470                0.0
28       470                0.0
10       480                0.5
59       480                0.5

Как мне это исправить? также есть ли способ отображать больше, чем просто в десятичных разрядах?

Обновлен вывод

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

df['Credit Score'] = round(df['Credit Score'], -1)

Новый вывод после удаления строки выше

df.sort_values('Credit Score')

    Credit Score    Delinquency Rate
54     447                 1.0
28     471                 0.0
17     474                 0.0
21     475                 0.5
10     476                 0.5
... ... ...
16     839                 0.0
28     839                 0.0
45     839                 0.0
65     839                 0.0
62     839                 0.0

1 Ответ

2 голосов
/ 30 апреля 2020

IIU C

# new sample df
df = pd.DataFrame({'Credit Scores':[654 ,738, 863, 649, 650],
                   'Delinquent': [True, False, True, True, False]})

# use round with -1 to round to the nearest 10
df['Credit Scores'] = round(df['Credit Scores'], -1)

# group by credit score and get the mean
s = df.groupby('Credit Scores')['Delinquent'].mean()

s.reset_index().plot(kind='scatter', x='Credit Scores', y='Delinquent')


               Delinquent
Credit Scores            
650              0.666667
740              0.000000
860              1.000000
...