不用客气
我们需要定义一个函数,传入两个参数,分别为贷款日期和观测日期(观测日期一般是月末),然后根据这两个日期计算账龄月。
然后看下账龄(Month of Book,MOB)的定义
一旦申贷订单被放款,类似于婴孩一出生就有了年龄,该申贷订单也便拥有了账龄和生命周期。
MOB0:放款日至当月月底 账龄为0
MOB1:放款后第二个完整的月份 账龄为1
MOB2:放款后第三个完整的月份 账龄为2
其他依此类推。
然后我们举例说明一下,比如放款日为2020年1月20日,假定放贷6期(也就是6个月)
那么2020年1月20日-2020年1月31日,该申贷订单账龄为0
2020年2月1日-2020年2月29日,该申贷订单账龄为1
2020年3月1日-2020年3月31日,该申贷订单账龄为2
2020年4月1日-2020年4月30日,该申贷订单账龄为3
2020年5月1日-2020年5月31日,该申贷订单账龄为4
2020年6月1日-2020年6月30日,该申贷订单账龄为5
2020年7月1日-2020年7月31日,该申贷订单账龄为6
如果观测日期为3月31日,则根据上面的判断规则,得知账龄为2。然后我们分析我们是怎么进行人工思考的:
1.我们设定x=放款日birthdate=2020年1月20日,账龄n=0,
2判断x是否小于obsdate,如果回答是肯定的则执行第3条,如果回答是否定的则停止执行后面的程序,返回最终结果n
3.把x向前推一个月得到新的x,x=x+1个月。然后执行4
4.判断x是否小于obsdate,如果是则n=n+1。然后执行第2条。
但是在python里面如何将这个计算过程自动化呢,我们就可以定义一个函数
def age_month(birthdate,obsdate): from dateutil import relativedelta x=birthdate n=0 while x<obsdate: x=x+relativedelta.relativedelta(months=1) if x<=obsdate: n=n+1 return n
我们试一下这个函数
age_month(pd.Timestamp("2020-1-20"),pd.Timestamp("2020-3-31"))
可以看到结果是正确的。