#商家被领取的特定优惠券数目 pivot = pd.pivot_table(data, index=keys13, values='cnt', aggfunc=lambda x:len(set(x))) pivot = pd.DataFrame(pivot).rename(columns={ 'cnt': 'merchant_differ_coupon'}).reset_index() feature = pd.merge(feature, pivot, on=keys13, how='left')解释代码函数
时间: 2024-04-07 15:28:11 浏览: 129
这段代码主要是对一个数据集进行基于某些特定键值(keys13)的聚合操作,统计不同商家被领取的特定优惠券的数量。其中,pivot_table()函数用于实现数据透视表的操作,index参数指定透视表的行索引,values参数指定需要聚合的数值列,aggfunc参数指定聚合函数,这里使用lambda函数实现去重计数。接着,将聚合结果转化为DataFrame格式,并将聚合函数的名称改为'merchant_differ_coupon',最后通过merge()函数将聚合结果与原始数据集合并,以获得每个商家被领取的特定优惠券的数量信息。
相关问题
# 用户在多少商家领取并消费优惠券 pivot = pd.pivot_table(data[data['Date'].notnull()&data['Date_received'].notnull()][['User_id', 'Merchant_id']], index=keys1, values='Merchant_id', aggfunc=lambda x:len(set(x))) pivot = pd.DataFrame(pivot).rename(columns={'Merchant_id':prefixs + 'received_consume_differ_merchant'}).reset_index() feature_user = pd.merge(feature_user, pivot, on=keys1, how='left') # 用户对不同商家领取优惠券的核销率(领券消费数/领券数) feature_user[prefixs+'received_consume_merchant_rate'] = feature_user[prefixs + 'received_consume_differ_merchant'].astype('float')/feature_user[prefixs + 'received_differ_merchant'].astype('float') # 用户15天内消费优惠券数量 pivot = pd.pivot_table(data[data['label']==1][['User_id', 'cnt']], index=keys1, values='cnt', aggfunc=len) pivot = pd.DataFrame(pivot).rename(columns={'cnt': prefixs+'15_consume_cnt'}).reset_index() feature_user = pd.merge(feature_user, pivot, on=keys1, how='left') # 用户15天内未消费优惠券数量 pivot = pd.pivot_table(data[data['label']==0][['User_id', 'cnt']], index=keys1, values='cnt', aggfunc=len) pivot = pd.DataFrame(pivot).rename(columns={'cnt': prefixs+'15_not_consume_cnt'}).reset_index() feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')用groupby(函数改写)
# 用户在多少商家领取并消费优惠券
pivot = data[data['Date'].notnull() & data['Date_received'].notnull()][['User_id', 'Merchant_id']].groupby(keys1)['Merchant_id'].nunique().reset_index()
pivot = pivot.rename(columns={'Merchant_id': prefixs + 'received_consume_differ_merchant'})
feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')
# 用户对不同商家领取优惠券的核销率(领券消费数/领券数)
feature_user[prefixs + 'received_consume_merchant_rate'] = feature_user[prefixs + 'received_consume_differ_merchant'].astype('float') / feature_user[prefixs + 'received_differ_merchant'].astype('float')
# 用户15天内消费优惠券数量
pivot = data[data['label'] == 1][['User_id', 'cnt']].groupby(keys1)['cnt'].count().reset_index()
pivot = pivot.rename(columns={'cnt': prefixs+'15_consume_cnt'})
feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')
# 用户15天内未消费优惠券数量
pivot = data[data['label'] == 0][['User_id', 'cnt']].groupby(keys1)['cnt'].count().reset_index()
pivot = pivot.rename(columns={'cnt': prefixs+'15_not_consume_cnt'})
feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')
# 用户领券数 keys = ['User_id'] # 主键 prefixs = 'simple_' + '_'.join(keys) + '_' # 特征名前缀,由label_field和主键组成 pivot = pd.pivot_table(data, index=keys, values='cnt', aggfunc=len) # 以keys为键,'cnt'为值,使用len统计出现的次数 pivot = pd.DataFrame(pivot).rename(columns={ 'cnt': prefixs + 'receive_cnt'}).reset_index() # pivot_table后keys会成为index,统计出的特征列会以values即'cnt'命名,将其改名为特征名前缀+特征意义,并将index还原 feature = pd.merge(feature, pivot, on=keys, how='left') # 将id列与特征列左连解释一下该段代码
好的,你的第二个问题是如何统计用户领券数,并将其作为特征加入到数据集中?
首先,我们需要以 `User_id` 为键,统计领券次数。可以使用 Pandas 的 `pivot_table` 方法实现,具体代码如下:
```
keys = ['User_id'] # 主键
pivot = pd.pivot_table(data, index=keys, values='cnt', aggfunc=len) # 以keys为键,'cnt'为值,使用len统计出现的次数
```
其中,`data` 是原始数据集,`keys` 是主键列表,`cnt` 是领券次数列的名称,`len` 是统计函数。上述代码将根据 `User_id` 统计每个用户领券的次数。
接下来,我们将统计结果作为新的一列特征加入到数据集中。具体代码如下:
```
prefixs = 'simple_' + '_'.join(keys) + '_' # 特征名前缀,由 label_field 和主键组成
pivot = pd.DataFrame(pivot).rename(columns={'cnt': prefixs + 'receive_cnt'}).reset_index() # 将统计结果重命名,并还原 index
feature = pd.merge(feature, pivot, on=keys, how='left') # 将 id 列与特征列左连
```
其中,`prefixs` 是特征名前缀,由 `label_field` 和主键组成;`pivot` 是统计结果,使用 `rename` 方法将 `cnt` 列重命名为特征名前缀加上 `receive_cnt`,并使用 `reset_index` 方法还原 index;`feature` 是数据集,使用 `merge` 方法将 id 列与特征列左连接,将统计结果加入到数据集中。
阅读全文