使用Pandas进行变量衍生
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进行变量衍生相关推荐
- 使用pandas处理时间变量
在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据.Pandas提供了强大的日期数据处理的功能,下面整理了一些使用pandas处理时间变量的常用技 ...
- PART 2.1 风控模型种类变量选择范围变量衍生特征交叉
最重要的事情开始都会讲:建模是始终服务于业务的,没有业务的评分卡就没有灵魂 评分卡环节的介绍 风控模型种类 获客阶段: 用户响应模型:在获客阶段的用户转化情况(比如互联网引流用户注册情况) 风险预筛选 ...
- [数据可视化]Pandas单变量画图
Pandas单变量画图 Bar Chat Line Chart Area Chart Histogram df.plot.bar() df.plot.line() df.plot.area() df. ...
- 机器学习之金融信贷风控(二)申请评分卡中的数据预处理和特征衍生(未完待续)
申请评分卡中的数据预处理和特征衍生 模型处理的一般流程: 构建信用风险模型的特征 获取数据 链接:https://pan.baidu.com/s/1CsY11ArZ6YK3o1icghWj2w 提取码 ...
- pandas整表写入excel指定位置_当Python遇到Excel,一个能打的都没有~
几乎人人都在用Excel,这种极易上手的数据分析工具无处不在,一旦你掌握了窍门,它就变得非常强大.而Python通常被认为更具有挑战性,但能做的事也更多. 当Python遇到Excel会发生什么?本文 ...
- 用spss做哑变量--给不敲代码同学福音
今天给各位分享怎么用spss做哑变量,也算是给不想敲代码的同学带来一些福利. 首先介绍下什么是哑变量.哑变量是由虚拟变量衍生过来,指的是非数值型的字符变量转换而来的变量,通常情况下这些变量都是无序的变 ...
- 你模型的变量符合业务逻辑了吗
关注 "番茄风控大数据",获取更多数据分析与风控大数据的实用干货. 模型开发中,经常需要对变量做各种统计分析,而且在分析前还需要跟业务跟产品的同事碰一下变量的逻辑.刚从事模型开发的 ...
- python中factor函数_左手用R右手Python系列——因子变量与分类重编码
原标题:左手用R右手Python系列--因子变量与分类重编码 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业 ...
- 风控建模十二:数据淘金——如何从APP数据中挖掘出有效变量
风控建模十二:数据淘金--如何从APP数据中挖掘出有效变量 1.常识知识 2.个例分析 3.分布排查 智能手机的诞生改变了人类的生活方式,智能手机所承载的功能日臻完善.强大,人们在衣.食.住.行.工作 ...
最新文章
- 使用SaltStack安装JDK1.6
- Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--转
- CF1251F-Red-White Fence【NTT】
- 数字孪生体技术白皮书_基于Flownex的数字孪生体解决方案 系列介绍之二:数据中心应用实例...
- PHP工程师需要掌握的知识(转载)
- C/C++混淆点-逗号运算符
- 【Computer Organization笔记18】大实验讨论:控制器设计、指令流程表
- python 3d大数据可视化软件_4个最受欢迎的大数据可视化工具
- 百度官方wormHole后门检测记录(转)
- Nagios社区真有意思
- 进阶 | 产品失效模式与效益分析(DFMEA)的实际应用
- WIN7 SP1系统浏览器怎么离线升级到IE11,怎么解决?
- 无线电射频能量的收集
- 2023系统分析师综合知识必备知识点
- r740服务器固态硬盘和机械硬盘一起用_搭载固态硬盘的服务器究竟比搭机械硬盘快多少?...
- 1816. 截断句子【我亦无他唯手熟尔】
- mysql ndb安装_MySQL NDB Cluster 安装文档-基于CentOS7搭建
- 鼓励师加成太刺激,鼻血喷了半斤,代码不一会儿就写完了...
- 二维dct变换例题_图象题处理习题
- Jackson 解析j@JsonIgnorePropertiesson数据之忽略解析字段注解
热门文章
- debug疯了_作业没疯,我先疯了 益智解谜《作业疯了》试玩
- isp 图像算法(四)之white balance gain control 就是对 r,gr,gb,b 进行加权
- 珍爱网java高级等通知?_珍爱网独家JAVA开发工程师面试题及流程详解
- 强化学习笔记 experience replay 经验回放
- 文巾解题 929. 独特的电子邮件地址
- zip与zip(*)
- R语言应用实战系列(三)-智能推荐模型的构建
- tableau可视化数据分析60讲(十九)-tableau仪表板布局
- 向人类进化史看齐,编程语言的“别样”编年史
- JAVA WEB知识总结之一--responserequest