# nunique特征 for i in ['product','campaign_id','webpage_id','product_category_id']: df_tr_te['day_'+str(i)+'_nunique'] = df_tr_te.groupby(['user_id','day'])[i].transform('nunique') df_tr_te['day_'+str(i)+'_nunique_p%'] = df_tr_te['user_idday_cnt'] / df_tr_te['day_'+str(i)+'_nunique'] df_tr_te['day_web_nunique'] = df_tr_te.groupby(['user_id','day','hour'])['webpage_id'].transform('nunique')
时间: 2023-06-27 16:07:11 浏览: 148
这段代码中,首先针对四个特征('product','campaign_id','webpage_id','product_category_id'),使用 pandas 中的 groupby 函数,按照用户和日期进行分组,并统计每个用户在每个日期内该特征的不同取值个数(nunique)。然后,将统计结果除以每个用户在该日期内的总操作次数('user_idday_cnt')得到一个比例特征('day_'+str(i)+'_nunique_p%')。最后,又针对 'webpage_id' 特征,进一步在每个用户、日期和小时级别上统计该特征的不同取值个数。
相关问题
# count计数 df_tr_te['user_id_webpage_id_product'] = df_tr_te.groupby(['user_id','product','webpage_id'])['id'].transform('count') # 产品按用户, 天权重 df_tr_te['user_id_day_range'] = df_tr_te.groupby(['user_id','day'])['product'].transform(lambda x : len(x) / np.array(range(1,len(x)+1))) # 产品按用户权重 df_tr_te['user_id_range'] = df_tr_te.groupby(['user_id'])['product'].transform(lambda x : len(x) / np.array(range(1,len(x)+1))) # 网页按用户, 产品权重 df_tr_te['user_id_product_webpage_range'] = df_tr_te.groupby(['user_id','product'])['webpage_id'].transform(lambda x : len(x) / np.array(range(1,len(x)+1))) # 网页按用户, 活动权重 df_tr_te['user_id_campaign_id_webpage_range'] = df_tr_te.groupby(['user_id','campaign_id'])['webpage_id'].transform(lambda x : len(x) / np.array(range(1,len(x)+1)))
这是一些 Pandas 的代码,用于对 DataFrame 进行分组计数和计算权重。具体来说:
1. `df_tr_te.groupby(['user_id','product','webpage_id'])['id'].transform('count')` 会对 DataFrame `df_tr_te` 按照三个列(`user_id`、`product` 和 `webpage_id`)进行分组,然后对每个分组内的 `id` 列进行计数,最终返回一个 Series,其中包含了每个样本所在分组的计数值。
2. `df_tr_te.groupby(['user_id','day'])['product'].transform(lambda x : len(x) / np.array(range(1,len(x)+1)))` 会对 DataFrame `df_tr_te` 按照两个列(`user_id` 和 `day`)进行分组,然后对每个分组内的 `product` 列进行计数,并根据计数值计算权重。具体来说,对于每个分组,它会计算该分组内 `product` 列的长度,然后除以一个从 1 到分组长度的数组,得到一个权重序列,最终返回一个 Series,其中包含了每个样本所在分组的权重值。
3. `df_tr_te.groupby(['user_id'])['product'].transform(lambda x : len(x) / np.array(range(1,len(x)+1)))` 会对 DataFrame `df_tr_te` 按照一个列(`user_id`)进行分组,然后对每个分组内的 `product` 列进行计数,并根据计数值计算权重。具体来说,对于每个分组,它会计算该分组内 `product` 列的长度,然后除以一个从 1 到分组长度的数组,得到一个权重序列,最终返回一个 Series,其中包含了每个样本所在分组的权重值。
4. `df_tr_te.groupby(['user_id','product'])['webpage_id'].transform(lambda x : len(x) / np.array(range(1,len(x)+1)))` 会对 DataFrame `df_tr_te` 按照两个列(`user_id` 和 `product`)进行分组,然后对每个分组内的 `webpage_id` 列进行计数,并根据计数值计算权重。具体来说,对于每个分组,它会计算该分组内 `webpage_id` 列的长度,然后除以一个从 1 到分组长度的数组,得到一个权重序列,最终返回一个 Series,其中包含了每个样本所在分组的权重值。
5. `df_tr_te.groupby(['user_id','campaign_id'])['webpage_id'].transform(lambda x : len(x) / np.array(range(1,len(x)+1)))` 会对 DataFrame `df_tr_te` 按照两个列(`user_id` 和 `campaign_id`)进行分组,然后对每个分组内的 `webpage_id` 列进行计数,并根据计数值计算权重。具体来说,对于每个分组,它会计算该分组内 `webpage_id` 列的长度,然后除以一个从 1 到分组长度的数组,得到一个权重序列,最终返回一个 Series,其中包含了每个样本所在分组的权重值。
# 不同组合的时间均值 lis_i_1 = ['user_id','product','campaign_id','webpage_id','product_category_id', 'user_group_id','age_level','gender','user_depth','var_1'] for c in lis_i_1: df_tr_te[str(c) + '_user_time_hour_mean'] = df_tr_te.groupby(c)['user_time_hour'].transform('mean') df_tr_te[str(c) + '_user_time_day_mean'] = df_tr_te.groupby(c)['user_time_hour'].transform('mean') df_tr_te[str(c) + '_user_time_hour_sum'] = df_tr_te.groupby(c)['user_time_hour'].transform('sum') df_tr_te[str(c) + '_user_time_day_sum'] = df_tr_te.groupby(c)['user_time_hour'].transform('sum')
这段代码的作用是对数据集进行特征工程处理,根据不同的组合将用户在不同时间段内的行为进行统计。具体来说,对于列表 `lis_i_1` 中的每个特征,都构造了四个新特征:
- `str(c) + '_user_time_hour_mean'`:表示在当前特征值相同的情况下,用户行为在每小时的平均次数。
- `str(c) + '_user_time_day_mean'`:表示在当前特征值相同的情况下,用户行为在每天的平均次数。
- `str(c) + '_user_time_hour_sum'`:表示在当前特征值相同的情况下,用户行为在每小时的总次数。
- `str(c) + '_user_time_day_sum'`:表示在当前特征值相同的情况下,用户行为在每天的总次数。
通过对不同特征的不同组合,可以得到更加丰富的用户行为特征,对于模型的训练和预测都会有一定的帮助。
阅读全文