计算每个默认存储桶中有多少美元

时间:2018-10-01 20:21:21

标签: python pandas

我有以下代码,用于确定每个还款中有多少还款(即到期的0-7天,到期的7-15天...等)

例如,还款额为100。20提早提款,然后客户错过了还款日期。因此,80进入了0-7dpd存储桶,依此类推。同样,如果客户在7天之内没有还款,则80款将进入7-15dpd的付款期。

该代码有效,但是需要很长时间。我想知道是否有一种方法可以使代码运行更快。

repayments['principal_0_7_dpd'] = np.where((repayments.paid_y_n == 'no') & (repayments.days_since_due >= 2.0), repayments.amount_principal - (repayments.child_principal_repaid_early), 0)
repayments['principal_7_15_dpd'] = np.where((repayments.paid_y_n == 'no') & (repayments.days_since_due >= 7.0), repayments.amount_principal - (repayments.child_principal_repaid_early + repayments.child_principal_repaid_1_7_days), 0)
repayments['principal_15_30_dpd'] = np.where((repayments.paid_y_n == 'no') & (repayments.days_since_due >= 15.0), repayments.amount_principal - (repayments.child_principal_repaid_early + repayments.child_principal_repaid_1_7_days + repayments.child_principal_repaid_7_15_days), 0)  
repayments['principal_30_45_dpd'] = np.where((repayments.paid_y_n == 'no') & (repayments.days_since_due >= 30.0), repayments.amount_principal - (repayments.child_principal_repaid_early + repayments.child_principal_repaid_1_7_days + repayments.child_principal_repaid_7_15_days + repayments.child_principal_repaid_15_30_days), 0)  
repayments['principal_45_60_dpd'] = np.where((repayments.paid_y_n == 'no') & (repayments.days_since_due >= 45.0), repayments.amount_principal - (repayments.child_principal_repaid_early + repayments.child_principal_repaid_1_7_days + repayments.child_principal_repaid_7_15_days + repayments.child_principal_repaid_15_30_days + repayments.child_principal_repaid_30_45_days), 0)  
repayments['principal_60_90_dpd'] = np.where((repayments.paid_y_n == 'no') & (repayments.days_since_due >= 60.0), repayments.amount_principal - (repayments.child_principal_repaid_early + repayments.child_principal_repaid_1_7_days + repayments.child_principal_repaid_7_15_days + repayments.child_principal_repaid_15_30_days + repayments.child_principal_repaid_30_45_days + repayments.child_principal_repaid_45_60_days), 0)  
repayments['principal_90_120_dpd'] = np.where((repayments.paid_y_n == 'no') & (repayments.days_since_due >= 90.0), repayments.amount_principal - (repayments.child_principal_repaid_early + repayments.child_principal_repaid_1_7_days + repayments.child_principal_repaid_7_15_days + repayments.child_principal_repaid_15_30_days + repayments.child_principal_repaid_30_45_days + repayments.child_principal_repaid_45_60_days + repayments.child_principal_repaid_60_90_days), 0)  
repayments['principal_120_plus_dpd'] = np.where((repayments.paid_y_n == 'no') & (repayments.days_since_due >= 120.0), repayments.amount_principal - (repayments.child_principal_repaid_early + repayments.child_principal_repaid_1_7_days + repayments.child_principal_repaid_7_15_days + repayments.child_principal_repaid_15_30_days + repayments.child_principal_repaid_30_45_days + repayments.child_principal_repaid_45_60_days + repayments.child_principal_repaid_60_90_days + repayments.child_principal_repaid_90_120_days), 0)       

您可以使用以下测试数据。预期的输出也包括在下面:

df = pd.DataFrame({
'amount_principal':[456.6459958, 456.6459958], 
'days_since_due':[1068, 1061], 
'paid_y_n':['yes', 'no'], 
'child_principal_repaid_early':[0, 0], 
'child_principal_repaid_1_7_days':[0, 0], 
'child_principal_repaid_7_15_days':[0, 0],
'child_principal_repaid_15_30_days':[0, 180.2126753],
'child_principal_repaid_30_45_days':[0, 0],
'child_principal_repaid_45_60_days':[0, 0],
'child_principal_repaid_60_90_days':[0, 0],
'child_principal_repaid_90_120_days':[0, 0],
'child_principal_repaid_120_plus_days':[0, 0]}, index = [0,1])

enter image description here

0 个答案:

没有答案