2017-02-12 3 views
1

У меня есть панд dataframe, который я создал с помощью GroupBy и результат возврата заключается в следующем:Попытка рассчитать процент и добавить новый столбец с помощью панд

  loan_type 
type    
risky  23150 
safe  99457 

Я хочу, чтобы создать столбец называется ПХТ и добавить его к dataframe я сделал это:

total = loans.sum(numeric_only=True) 
loans['pct'] = loans.apply(lambda x:x/ total) 

И результат был таков:

 loan_type pct 
type     
risky  23150 NaN 
safe  99457 NaN 

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

import numpy as np 
bad_loans = np.array(club['bad_loans']) 

for index, row in enumerate(bad_loans): 
    if row == 0: 
     bad_loans[index] = 1 
    else: 
     bad_loans[index] = -1 

loans = pd.DataFrame({'loan_type' : bad_loans}) 
loans['type'] = np.where(loans['loan_type'] == 1, 'safe', 'risky')loans = np.absolute(loans.groupby(['type']).agg({'loan_type': 'sum'})) 
total = loans.sum(numeric_only=True) 
loans['pct'] = loans.apply(lambda x:x/ total) 

ответ

1

Существует проблема, которую вы хотите разделить не по значению, но одно значения Series и потому что не выровнять indexes получить NaN s.

Я думаю, что Простейшая является преобразование Seriestotal в numpy array:

total = loans.sum(numeric_only=True) 
loans['pct'] = loans.loan_type/total.values 

print (loans) 
     loan_type  pct 
type      
risky  23150 0.188815 
safe  99457 0.811185 

Или конвертировать выберите путем индексации [0] - выход номер:

total = loans.sum(numeric_only=True)[0] 
loans['pct'] = loans.loan_type/total 

print (loans) 
     loan_type  pct 
type      
risky  23150 0.188815 
safe  99457 0.811185 
Смежные вопросы