import pandas as pd
import numpy as np
dic={'delq1':[0,0,1],
'delq2':[1,1,2],
'delq3':[2,0,3],
'delq4':[0,1,4],
'delq5':[1,2,5],
'delq6':[1,3,0],
'delq7':[1,0,1],
'delq8':[0,0,2],
'delq9':[0,1,3],
'delq10':[0,2,0]}
df1=pd.DataFrame(data=dic,index=['cust1','cust2','cust3'])

  上图是一个记录客户近10期的逾期记录的数据框,基于逾期行为数据进行变量的衍生。比如cust1客户,最近1期状态为M0,最近2期状态为M1,还款历史字段应为“0001110210”。

1.计算近p期总逾期次数
方法一:

def month_count(df, p):auto_value=np.where(df>0,1,0).sum(axis=1)return auto_value
auto_value=month_count(df1,10)

方法二:

def delqcnt(x,term):result=0 j=term+1for i in range(1,j): result=result+(1 if (x['delq'+str(i)]>0) else 0) #计算每期记录是否逾期return result #输出加总逾期次数结果
df1['加总逾期次数']=df1.apply(lambda x:delqcnt(x,10),axis=1)

结果:

2.计算近p期最大的连续逾期次数

def maxcontinue(x,term):result=0 temp=0 #临时存储的变量j=term+1 for i in range(1,j): if (x['delq'+str(i)]==0) :temp=0 #如果当前字段不逾期,重新计算连续次数temp=temp+(1 if (x['delq'+str(i)]>0) else 0) #计算连续逾期次数result=max(result,temp) #每一段连续逾期比较,取最大的一段逾期return result #输出最大的逾期次数
df1['最大的连续逾期次数']=df1.apply(lambda x:maxcontinue(x,10),axis=1)

即计算还款历史中连续大于0的个数,cust1客户最大连续逾期次数为3,为1->1->1,cust3连续逾期次数为5,为1->2->3->4->5。

3.最近一次逾期距今月份数
方法一:

def lastdelq(x,term):result=99 #输出结果默认为99j=term+1 #为了获取到相应的字段for i in range(1,j): #循环取值result=min(result,(i if (x['delq'+str(i)]>0) else 99)) #计算最近一次逾期距今月份数return result #输出最近一次逾期距今月份数
df1['最近一次逾期距今月份数_1']=df1.apply(lambda x:lastdelq(x,10),axis=1)

方法二:

def lastdelq_(df1,term):auto_value=[]for i in range(len(df1)):row_value=df1.ix[i,'delq1':'delq'+str(term)]if row_value.max()<=0:indexs=0auto_value.append(indexs)else:indexs=1for j in row_value:if j>0:breakindexs+=1auto_value.append(indexs)return auto_value
df1['最近一次逾期距今月份数_2']=lastdelq_(df1,10)

4.计算逾期连续增加的次数

def maxcontinuechg(x,term):result=0 #输出结果默认为0temp=0 #临时变量设置为0for i in range(1,term): #循环取值j=i+1 #取后一位期数的值if (x['delq'+str(j)]<=x['delq'+str(i)]):temp=0 #若逾期期数没有增加,设置临时变量为0temp=temp+(1 if (x['delq'+str(j)]>x['delq'+str(i)]) else 0) #计算逾期连续增加的次数result=max(result,temp) #若有多段连续逾期,比对取最大的一段return result #输出逾期连续增加的次数
df1['逾期连续增加的次数']=df1.apply(lambda x:maxcontinuechg(x,10),axis=1)

5.计算逾期增加的次数

def maxcontinuechg(x,term):result=0 #输出结果默认为0temp=0 #临时变量设置为0for i in range(1,term): #循环取值j=i+1 #取后一位期数的值temp=temp+(1 if (x['delq'+str(j)]>x['delq'+str(i)]) else 0) #计算逾期连续增加的次数result=max(result,temp) #若有多段连续逾期,比对取最大的一段return result #输出逾期增加的次数
df1['逾期增加的次数']=df1.apply(lambda x:maxcontinuechg(x,10),axis=1)

6.计算最近p个月,每两个月间的增长量的最大值

def maxtwomonth_interval(x,term):result=0for i in range(1,term):j=i+1temp=x[j]-x[i]# print(temp)result=max(result,temp)return result
df1['每两个月间的增长量的最大值']=df1.apply(lambda x:maxtwomonth_interval(x,9),axis=1)

7.计算最近p个月取最大值的月份距现在的月份数

def maxmonth_interval(x,term):df=x.ix[:,'delq1':'delq'+str(term)]df['_max'] = np.nanmax(df, axis=1)for i in range(1, term + 1):df['delq' + str(i)] = list(df['delq' + str(i)] == df['_max'])df_value = np.where(df == True, 1, 0)auto_value = []for i in range(len(df_value)):row_value = df_value[i, :]indexs = 1for j in row_value:if j == 1:breakindexs += 1auto_value.append(indexs)return auto_value
df1['最近p个月取最大值的月份距现在的月份数']=maxmonth_interval(df1,10)

8.计算最近p个月的均值

def Avg(x,p):df=x.ix[:,'delq1':'delq'+str(p)]auto_value=np.nanmean(df,axis=1)return auto_value
df1['最近p个月的均值']=Avg(df1,10)

计算最近p个月的和

def Tot(x,p):df=x.ix[:,'delq1':'delq'+str(p)]auto_value=np.nansum(df,axis=1)return auto_value
df1['最近p个月的求和']=Tot(df1,10)

计算最近p个月特征的最大值

def Max(x,p):df=x.ix[:,'delq1':'delq'+str(p)]auto_value=np.nanmax(df,axis=1)return auto_value
df1['最近p个月的最大值']=Max(df1,10)

【作者】:Labryant
【原创公众号】:风控猎人
【简介】:某创业公司策略分析师,积极上进,努力提升。乾坤未定,你我都是黑马。
【转载说明】:转载请说明出处,谢谢合作!~

使用Pandas进行变量衍生相关推荐

  1. 使用pandas处理时间变量

      在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据.Pandas提供了强大的日期数据处理的功能,下面整理了一些使用pandas处理时间变量的常用技 ...

  2. PART 2.1 风控模型种类变量选择范围变量衍生特征交叉

    最重要的事情开始都会讲:建模是始终服务于业务的,没有业务的评分卡就没有灵魂 评分卡环节的介绍 风控模型种类 获客阶段: 用户响应模型:在获客阶段的用户转化情况(比如互联网引流用户注册情况) 风险预筛选 ...

  3. [数据可视化]Pandas单变量画图

    Pandas单变量画图 Bar Chat Line Chart Area Chart Histogram df.plot.bar() df.plot.line() df.plot.area() df. ...

  4. 机器学习之金融信贷风控(二)申请评分卡中的数据预处理和特征衍生(未完待续)

    申请评分卡中的数据预处理和特征衍生 模型处理的一般流程: 构建信用风险模型的特征 获取数据 链接:https://pan.baidu.com/s/1CsY11ArZ6YK3o1icghWj2w 提取码 ...

  5. pandas整表写入excel指定位置_当Python遇到Excel,一个能打的都没有~

    几乎人人都在用Excel,这种极易上手的数据分析工具无处不在,一旦你掌握了窍门,它就变得非常强大.而Python通常被认为更具有挑战性,但能做的事也更多. 当Python遇到Excel会发生什么?本文 ...

  6. 用spss做哑变量--给不敲代码同学福音

    今天给各位分享怎么用spss做哑变量,也算是给不想敲代码的同学带来一些福利. 首先介绍下什么是哑变量.哑变量是由虚拟变量衍生过来,指的是非数值型的字符变量转换而来的变量,通常情况下这些变量都是无序的变 ...

  7. 你模型的变量符合业务逻辑了吗

    关注 "番茄风控大数据",获取更多数据分析与风控大数据的实用干货. 模型开发中,经常需要对变量做各种统计分析,而且在分析前还需要跟业务跟产品的同事碰一下变量的逻辑.刚从事模型开发的 ...

  8. python中factor函数_左手用R右手Python系列——因子变量与分类重编码

    原标题:左手用R右手Python系列--因子变量与分类重编码 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业 ...

  9. 风控建模十二:数据淘金——如何从APP数据中挖掘出有效变量

    风控建模十二:数据淘金--如何从APP数据中挖掘出有效变量 1.常识知识 2.个例分析 3.分布排查 智能手机的诞生改变了人类的生活方式,智能手机所承载的功能日臻完善.强大,人们在衣.食.住.行.工作 ...

最新文章

  1. 使用SaltStack安装JDK1.6
  2. Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--转
  3. CF1251F-Red-White Fence【NTT】
  4. 数字孪生体技术白皮书_基于Flownex的数字孪生体解决方案 系列介绍之二:数据中心应用实例...
  5. PHP工程师需要掌握的知识(转载)
  6. C/C++混淆点-逗号运算符
  7. 【Computer Organization笔记18】大实验讨论:控制器设计、指令流程表
  8. python 3d大数据可视化软件_4个最受欢迎的大数据可视化工具
  9. 百度官方wormHole后门检测记录(转)
  10. Nagios社区真有意思
  11. 进阶 | 产品失效模式与效益分析(DFMEA)的实际应用
  12. WIN7 SP1系统浏览器怎么离线升级到IE11,怎么解决?
  13. 无线电射频能量的收集
  14. 2023系统分析师综合知识必备知识点
  15. r740服务器固态硬盘和机械硬盘一起用_搭载固态硬盘的服务器究竟比搭机械硬盘快多少?...
  16. 1816. 截断句子【我亦无他唯手熟尔】
  17. mysql ndb安装_MySQL NDB Cluster 安装文档-基于CentOS7搭建
  18. 鼓励师加成太刺激,鼻血喷了半斤,代码不一会儿就写完了...
  19. 二维dct变换例题_图象题处理习题
  20. Jackson 解析j@JsonIgnorePropertiesson数据之忽略解析字段注解

热门文章

  1. debug疯了_作业没疯,我先疯了 益智解谜《作业疯了》试玩
  2. isp 图像算法(四)之white balance gain control 就是对 r,gr,gb,b 进行加权
  3. 珍爱网java高级等通知?_珍爱网独家JAVA开发工程师面试题及流程详解
  4. 强化学习笔记 experience replay 经验回放
  5. 文巾解题 929. 独特的电子邮件地址
  6. zip与zip(*)
  7. R语言应用实战系列(三)-智能推荐模型的构建
  8. tableau可视化数据分析60讲(十九)-tableau仪表板布局
  9. 向人类进化史看齐,编程语言的“别样”编年史
  10. JAVA WEB知识总结之一--responserequest