python 标签_Python DataFrame中 打标签/归类 的6种方法

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)

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值