计算一系列时间内的贷款违约水平

时间:2018-01-18 10:59:44

标签: python pandas

随着时间的推移,我正在计算贷款账簿中的不同违约水平。我计算默认值为: amount_of_money_due_to_be_paid - amount_of_money_actually_paid

id  amount  due_date    paid y/n
1   1000    2017-01-01    no
2   1000    2017-02-01    yes
3   1000    2017-03-01    no
4   1000    2017-04-01    no
5   1000    2017-05-01    yes

我需要在不同的默认级别计算此值,即30 days_past_due60 days_past_due等在一个时间序列中。截至每个月的最后一天,我需要知道多少钱超过x天。 (例如截至6月30日,超过15天的金额是多少钱)

因此,我需要划分amount_of_money_actually_paid / amount_money_due_to_be_paid_up_to_15_days_ago

生成的数据框将每个月的最后一个日期列为每个列标题,并且列标题中每个日期的行都为default_%

Date:      2017-01-31  2017-02-29  2017-03-31  2017-04-30  2017-05-31  
Default %:    100%         50%       66.67%        25%          40%        

在Excel中,我通过在列标题之前将货币金额与due_date相加而减去x天数来计算分母(即汇总金额,如果due_date在之前,例如[(2017-03-31) - 15天)= 2017-03-16]

我需要帮助在Python中计算它。

我已经为我的代码的另一部分做了以下分析,我认为一个小的改动可以解决这个问题。

def default_days(date, outstanding_loans, days):
    m = (outstanding_loans['repayment_date'] <= date - pd.DateOffset(days))
    c = sum(m)
    return c

dates = pd.date_range('2015-11-30',pd.to_datetime('today'), freq='M')

defaultt = pd.DataFrame({'date':dates})

defaultt['15 days'] = defaultt['date'].apply(default_days, args=[repayments, 15])

这里的结果是它在每个指定日期之前15天用due_date计算行数。我需要它来汇总金额而不是计算行数

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。谢谢大家的意见!

def default_days(date, outstanding_loans, days):
    m = (outstanding_loans['repayment_date'] <= date - pd.DateOffset(days))
    y = outstanding_loans[m]
    c = y.amount_principal.sum()
    return c

dates = pd.date_range('2015-11-30',pd.to_datetime('today'), freq='M')

defaultt = pd.DataFrame({'date':dates})

defaultt['15 days'] = defaultt['date'].apply(default_days, args=[repayments, 15])