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