随着时间的推移,我正在计算贷款账簿中的不同违约水平。我计算默认值为:
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_due
,60 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计算行数。我需要它来汇总金额而不是计算行数
答案 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])