Преобразование столбца кредитных рейтингов, таких как AAA BB CC, в числовую категорию AAA = 1, BB = .75 и т. Д. В python? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть столбец в кадре данных, называемый «КРЕДИТНЫЙ РЕЙТИНГ» для ряда компаний в разных строках. Мне нужно назначить числовую категорию для рейтингов, таких как AAA и DDD, от 1 (AAA) до 0 (DDD). Есть ли быстрый простой способ сделать это и в основном создать новый столбец, где я получаю числа 1-0 на 0,1? Спасибо!

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Самый простой способ - просто создать отображение словаря:

mymap = {"AAA":1.0, "AA":0.9, ... "DDD":0.0} 

и затем применить его к фрейму данных:

df["CREDIT MAPPING"] = df["CREDIT RATING"].replace(mymap)
0 голосов
/ 12 сентября 2018

Хорошо, это было вроде как, хотя работать было не с чем, но мы идем:

# First getting a ratings list acquired from wikipedia than setting into a dataframe to replicate your scenario

ratings = ['AAA' ,'AA1' ,'AA2' ,'AA3' ,'A1' ,'A2' ,'A3' ,'BAA1' ,'BAA2' ,'BAA3' ,'BA1' ,'BA2' ,'BA3' ,'B1' ,'B2' ,'B3' ,'CAA' ,'CA' ,'C' ,'C' ,'E' ,'WR' ,'UNSO' ,'SD' ,'NR']
df_credit_ratings = pd.DataFrame({'Ratings_id':ratings})

df_credit_ratings = pd.concat([df_credit_ratings,df_credit_ratings]) # just to replicate duplicate records

# The set() command get the unique values
unique_ratings = set(df_credit_ratings['Ratings_id'])
number_of_ratings = len(unique_ratings) # counting how many unique there are
number_of_ratings_by_tenth = number_of_ratings/10 # Because from 0 to 1 by 0.1 to 0.1 there are 10 positions.

# the numpy's arange fills values in between from a range (first two numbers) and by which decimals (third number)
dec = list(np.arange(0.0, number_of_ratings_by_tenth, 0.1))

После этого вам нужно будет смешать уникальные оценки с весами:

df_ratings_unique = pd.DataFrame({'Ratings_id':list(unique_ratings)}) # list so it gets one value per row

РЕДАКТИРОВАТЬ: как Томас предложил в комментарии другого ответа, этот вид, вероятно, не подойдет вам, потому что это не будет реальный порядок важности рейтингов.Таким образом, вам, вероятно, потребуется сначала создать фрейм данных с ними уже по порядку и без сортировки.

df_ratings_unique.sort_values(by='Ratings_id', ascending=True, inplace=True) # sorting so it matches the order of our weigths above. 

Возобновление решения:

df_ratings_unique['Weigth'] = dec # adding the weigths to the DF

df_ratings_unique.set_index('Ratings_id', inplace=True) # setting the Rantings as index to map the values bellow

# now this is the magic, we're creating a new column at the original Dataframe and we'll map according to the `Ratings_id` by our unique dataframe
df_credit_ratings['Weigth'] = df_credit_ratings['Ratings_id'].map(df_ratings_unique.Weigth)
0 голосов
/ 12 сентября 2018

Вы можете использовать заменить:

df['CREDIT RATING NUMERIC'] = df['CREDIT RATING'].replace({'AAA':1, ... , 'DDD':0})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...