python中dataframe衍生时间切片特征


一、利用python衍生近几天的时间切片特征

源数据

stat_date    id    look    gender
2020-9-1    1    1    1
2020-9-1    2    3    0
2020-9-2    1    1    1
2020-9-2    2    4    0
2020-9-3    3    5    0
2020-9-3    1    1    1
2020-9-3    2    1    0
2020-9-4    1    1    1

衍生代码

#lastdays表示衍生近x天,cols是list形式,表示需要衍生的特征列名
def
last_days_feature(df,lastdays,cols): stat_date=set(df.stat_date)#把所有的日期都取出来,一个个看近x天的 df_sub=pd.DataFrame() for date2 in stat_date: date1=(pd.to_datetime(date2,format='%Y-%m-%d')-datetime.timedelta(days=lastdays-1)).strftime('%Y-%m-%d') df_date=df[(df.stat_date>=date1)&(df.stat_date<=date2)] df_tmp=df_date[df.stat_date==date2][['stat_date','id']] for col in cols: agg_list = [('last_%s_%s_count'%(lastdays,col),'count'), ('last_%s_%s_sum'%(lastdays,col),'sum'), ('last_%s_%s_max'%(lastdays,col),'max'), ('last_%s_%s_min'%(lastdays,col),'min'), ('last_%s_%s_mean'%(lastdays,col),'mean'), #('last_%s_%s_var'%(lastdays,col),'var'), #('last_%s_%s_std'%(lastdays,col),'std'), ('last_%s_%s_median'%(lastdays,col),'median')] #('last_%s_%s_skew'%(lastdays,col),'skew')] # 选取时间切片内的数据 进行groupby聚合计算 df_group=df_date.groupby('id')[col].agg(agg_list).reset_index() df_group['stat_date']=date2 #每一个col groupby后都要横向合并一下 df_tmp=pd.merge(df_tmp,df_group,how='left',on=['stat_date','id'])
     #每一个date的都要上下拼接好 df_sub
=pd.concat([df_sub,df_tmp],axis=0)
#最后所有date的拼接到总的df里面 df
=pd.merge(df,df_sub,how='left',on=['stat_date','id']).reset_index(drop=True) return df

衍生近1天的特征(就是只有当天的特征)

#衍生近几天的特征
df=pd.read_csv('a.csv')
#首先将时间转换位标准格式,这点很重要,否则2020-9-1和2020-09-02直接比,是不对的 df[
'stat_date']=[(pd.to_datetime(d,format='%Y-%m-%d')).strftime('%Y-%m-%d') for d in df.stat_date] df=last_days_feature(df,1,['look']) df

输出:

衍生近2天的特征(包含今天和昨天的)

#衍生近几天的特征
df=pd.read_csv('a.csv')
df['stat_date']=[(pd.to_datetime(d,format='%Y-%m-%d')).strftime('%Y-%m-%d') for d in df.stat_date]
df=last_days_feature(df,2,['look'])
df

如果再接着衍生近3天的特征,会直接把前面的衍生结果拼接上去

df=last_days_feature(df,3,['look'])
df

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM