链式groupby、df.groupby(['uid'])和df.groupby('uid')都生成series、agg('max')生成Series agg(['max'])生成df、批量agg快速重起列明、链式merge
今天主要工作:
1. 继续撸jdd 17th solution
2. 运营商建模汇报
3. to do list
4. 给德勤截图资料
他的贷款类很多变量有一个前提假设,就是这些贷款不会提前结清,但是按期在还,但是实际的业务中,提前结清很普遍,包括我们自己的产品,在有高额前期费的情况下,都有很多提前结清的情况下,更别说这种产品随借随还按日计息,所以从道理上讲他的依赖这个假设的变量,应该效果一般才对,对一些新东西做一下记录
求一个用户每月的平均贷款金额,先对一个客户一个月做groupby(['uid','month'])['loan_amount'].sum().reset_index(),再按uid做groupby,求loan_amount均值便可,连起来就是
df.groupby(['uid','month'])['loan_amount'].sum().reset_index().groupby(['uid'])[loan_amount].mean().reset_index()
df_loan.groupby(['uid'])['loan_amount'].sum()
和
df_loan.groupby('uid')['loan_amount'].sum()
都是得到Series,并没有差别
df_loan.groupby('uid')['loan_amount'].agg('max')
得到的是Series,名称叫loan_amount
df_loan.groupby('uid')['loan_amount'].agg(['max'])
得到的是DataFrame,uid为索引,第一个列明叫max
自定义的聚合函数同理
df_loan.groupby('uid',as_index=False)['loan_amount'].agg('max')
成功
df_loan.groupby('uid',as_index=False)['loan_amount'].agg(['max'])
这种情况下as_index无效,必须后面接reset_index()强行把索引uid变成第一列
一种批量agg,快速赋值的方法
stat_loanAmt = tmp.groupby('uid')['loan_amount'].agg(['sum','count','mean','max','min']).reset_index()
因为由上一条可知,这个的列明就是聚合函数的名称,所以
stat_loanAmt.columns = ['uid'] + [i + '_loanAmt_' + str(window_size) for i in stat_loanAmt.columns[1:]]
链式聚合可以提行对齐写,比如
loan3Month = month_loanAmt.merge(stat_loanAmt, on='uid', how='left') \
.merge(stat_loanPlanNum, on='uid', how='left') \
.merge(stat_amtPerPlan, on='uid', how='left') \
.merge(stat_loanInterval, on='uid', how='left') \
.fillna(0)
这个作者在提取特征时,还有一个细节就是有些特征,测试集比训练集时间起点一样,但是终点比训练集多一个月,我不知道这样是否好?
1. 继续撸jdd 17th solution
2. 运营商建模汇报
3. to do list
4. 给德勤截图资料
他的贷款类很多变量有一个前提假设,就是这些贷款不会提前结清,但是按期在还,但是实际的业务中,提前结清很普遍,包括我们自己的产品,在有高额前期费的情况下,都有很多提前结清的情况下,更别说这种产品随借随还按日计息,所以从道理上讲他的依赖这个假设的变量,应该效果一般才对,对一些新东西做一下记录
求一个用户每月的平均贷款金额,先对一个客户一个月做groupby(['uid','month'])['loan_amount'].sum().reset_index(),再按uid做groupby,求loan_amount均值便可,连起来就是
df.groupby(['uid','month'])['loan_amount'].sum().reset_index().groupby(['uid'])[loan_amount].mean().reset_index()
df_loan.groupby(['uid'])['loan_amount'].sum()
和
df_loan.groupby('uid')['loan_amount'].sum()
都是得到Series,并没有差别
df_loan.groupby('uid')['loan_amount'].agg('max')
得到的是Series,名称叫loan_amount
df_loan.groupby('uid')['loan_amount'].agg(['max'])
得到的是DataFrame,uid为索引,第一个列明叫max
自定义的聚合函数同理
df_loan.groupby('uid',as_index=False)['loan_amount'].agg('max')
成功
df_loan.groupby('uid',as_index=False)['loan_amount'].agg(['max'])
这种情况下as_index无效,必须后面接reset_index()强行把索引uid变成第一列
一种批量agg,快速赋值的方法
stat_loanAmt = tmp.groupby('uid')['loan_amount'].agg(['sum','count','mean','max','min']).reset_index()
因为由上一条可知,这个的列明就是聚合函数的名称,所以
stat_loanAmt.columns = ['uid'] + [i + '_loanAmt_' + str(window_size) for i in stat_loanAmt.columns[1:]]
链式聚合可以提行对齐写,比如
loan3Month = month_loanAmt.merge(stat_loanAmt, on='uid', how='left') \
.merge(stat_loanPlanNum, on='uid', how='left') \
.merge(stat_amtPerPlan, on='uid', how='left') \
.merge(stat_loanInterval, on='uid', how='left') \
.fillna(0)
这个作者在提取特征时,还有一个细节就是有些特征,测试集比训练集时间起点一样,但是终点比训练集多一个月,我不知道这样是否好?
留言
張貼留言