1. 单字段打是否标签----Numpy.where
公式:Numpy.where(判断条件,条件为真时的值,条件为假时的值)
例子:我需要新增一列目标变量,逾期30天以上的定义为坏客户,标签为1,否则为好客户,标签为0。代码可以这样写:
df['target']=np.where(df['ovddays']>30 ,1,0)
2. 单字段打是否标签----列表推导式
公式 [条件为真的值 if 条件 else 条件为假时的值 for x in 列]
上述的新增一列目标变量,也可以这样写:
df ['target']=[1 if x>30 else 0 for x in df ['ovddays'] ]
3. 单字段打是否标签----apply、lambda 函数
使用apply、lambda 函数相互配合。
公式: 列.apply(lambda x : 条件为真的值 if 条件 else 条件为假时的值)
例子:上述的例子中,还可以这样写。
df['target’]= df[‘ovddays’].apply(lambda x : 1 if x>30 else 0)
4. 多字段打是否标签----np.where 或者apply、lambda 函数结合都可以
例子:增加一列变量,申请次数大于50并且放款次数小于10次的客户,标签为1,否则为0。代码这样写:
df['type']=np.where( (df['apply']>30) & (df['offer']<10),1,0)
或者
df['type']=df[['apply','offer']].apply(lambda x : 1 if (x[0]>50) &(x[1]<10) else 0 ,axis=1)
5. 单字段进行多分类打标签-----pandas.cut或者df.loc或者apply、lambda、def结合进行判断。
a. 针对数值型的字段进行分段处理。
例子:对年龄进行分段处理,0-18岁为1,19-30岁为2,31-40岁为3,41-50岁为4,50岁以上为5,代码如下:
pd.cut(df ['age'],bins=[0,18,30,40,50,100],labels=[1,2,3,4,5],right=True)
b. 针对文本型的字段进行归类处理
第一种方法:一类一类地写入DataFrame中
df.loc[df [df ['province'].isin(['四川','贵州','重庆','湖南'])].index,'tag']='辣' ##选出目标行的索引,使用df.loc[索引,列名称]进行赋值
df.loc[df [df ['province'].isin(['广州','香港'])].index,'tag']='甜'##选出目标行的索引,使用df.loc[索引,列名称]进行赋值
df ['tag'].fillna('其他',inplace=True) ##剩余的情况直接填充空值
第二种方法:def 定义一个分类标准函数,然后使用apply、lambda函数应用第一步定义的函数
def judge_type(x):
if x in ['四川','贵州','重庆','湖南']:
a='辣'
elif x in ['广州','香港']:
a='甜'
else:
a='其他'
return a
df ['tag']=df ['province'].apply(lambda x :judge_type(x))
6. 多字段进行多分类打标签-----apply、lambda、def结合使用
要像决策树一样,手动使用多字段进行多分类的处理情况,步骤如下:
第一步:def 定义一个分类标准函数
第二部:使用apply、lambda函数应用第一步定义的函数
例子:增加一列变量,申请次数大于50并且放款次数大于10次并且逾期次数大于5的客户的客户,标签为A……。
def judge_type(x):##x为一个列表
if (x[0]>50) & (x[1]>10)& (x[2]>5):
a='A'
elif (x[0]>50) & (x[1]>10)& (x[2]<=5):
a='B'
elif (x[0]>50) & (x[1]<10)& (x[2]>5):
a='C'
elif (x[0]>50) & (x[1]<10)& (x[2]<=5):
a='D'
elif (x[0]<=50) & (x[1]>10)& (x[2]>5):
a='E'
elif (x[0]<=50) & (x[1]>10)& (x[2]<=5):
a='F'
elif (x[0]<=50) & (x[1]<10)& (x[2]>5):
a='G'
else:# (x[0]<=50) & (x[1]<10)& (x[2]<=5):
a='H'
return a
df[['appy','offer','ovd']].apply(lambda x : judge_type(list(x)),axis=1)