2017-02-12 56 views
1

我有我使用GROUPBY和返回結果創造了大熊貓數據幀新列是這樣的:嘗試計算比例,並添加使用熊貓

  loan_type 
type    
risky  23150 
safe  99457 

我想創建一個列名爲PCT,並將其添加以數據幀我這樣做:

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。

我覺得simpliest是轉換Seriestotalnumpy 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