ermutuxia

2021-01-14   阅读量: 5449

Python

如何根据借款日期和观测日期计算该笔贷款在那个观测日的账龄是多少?

扫码加入数据分析学习群

我们需要定义一个函数,传入两个参数,分别为贷款日期和观测日期(观测日期一般是月末),然后根据这两个日期计算账龄月。

然后看下账龄(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条。


image.png



但是在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"))

image.png

可以看到结果是正确的。

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.3018 1 6 关注作者 收藏

评论(6)

ermutuxia
2021-01-15

不用客气

0.3018 1 0 回复
wangxishi
2021-01-15

好哒 理解了 ~ 谢谢!

55.7549 1 0 回复
ermutuxia
2021-01-15

是的,后面他们就出师自谋生路了,也可能刚出师就over了

0.3018 1 0 回复
wangxishi
2021-01-15

后面循环的时候x已经不再是birthdate了。N也不再是之前的0了,N不断在每一次循环的基础上+1直到循环停止,对吧

55.7549 1 0 回复
ermutuxia
2021-01-15
while语句如下
while x<obsdate:

我们通过让x和obsdate比较得出是否继续循环,在循环体内,x会有一个向前推移的动作也就是

x=x+relativedelta.relativedelta(months=1)

x越来越大,当x大于等于obsdate的时候循环就停止了。

你可以认为是我们通过x控制循环是否继续。

把birthdate赋值给x之后开始执行第一次循环,然后x再不断变化。后面循环的时候x已经不再是birthdate了。

0.3018 1 0 回复
wangxishi
2021-01-15

我理解是因为借款日期小于等于观测日期的情况下 这个循环就会进行下去 所以这个情况下n会不断累加?

297.6625 1 0 回复

推荐课程

推荐帖子