解释一下一下代码df_pivot=pd.pivot_table(df,index='user_id',columns='movie_id',values='rate')
时间: 2023-04-11 14:01:33 浏览: 160
这段代码是使用 pandas 库中的 pivot_table() 函数,将 DataFrame 数据按照指定的行、列和值进行重塑,生成一个新的数据透视表。其中,index 参数指定了行索引,columns 参数指定了列索引,values 参数指定了要聚合的数值列。在这个例子中,该函数将 df 数据按照 user_id 和 movie_id 进行分组,然后将 rate 列的值作为聚合函数,生成一个以 user_id 为行索引,movie_id 为列索引,rate 为值的数据透视表 df_pivot。
相关问题
解释下这段代码 第三方商品 __df1 = __temp_df[__temp_df['show_name'] == '第三方商品'] if not __df1.empty: __df1 = __df1.pivot_table(index=['name', 'show_name'], values=['buy_num'], aggfunc=np.sum).reset_index() else: __df1 = __df1[['name', 'show_name', 'buy_num']] # 非第三方商品 __df2 = __temp_df[__temp_df['show_name'] != '第三方商品'] if not __df2.empty: __df2 = __df2.pivot_table(index=['gt_uuid', 'show_name'] ,values=['buy_num'], aggfunc=np.sum).reset_index() __df2 = pd.merge(left=__df2, right=pd.DataFrame(s_gt_rv, columns=['gt_uuid', 'goods_name']), how='left', on='gt_uuid') __df2 = __df2[['goods_name', 'show_name', 'buy_num']] __df2.rename(columns={'goods_name': 'name'}, inplace=True) else: __df2 = __df2[['name', 'show_name', 'buy_num']] __temp_df = pd.concat([__df1, __df2]) del __df1, __df2 __temp_df.rename(columns={'name': 'goods_name', 'show_name': 'gc_name', 'buy_num': 'num'}, inplace=True) __temp_df.sort_values(by='num', ascending=False, inplace=True) return_data['goods']['goods_list'] = __temp_df.to_dict(orient='records') __temp_df = __temp_df[['gc_name', 'num']] __temp_df = __temp_df.pivot_table(index='gc_name', values='num', aggfunc=np.sum).reset_index() __temp_df.sort_values(by='num', ascending=False, inplace=True) return_data['goods']['gc_list'] = __temp_df.to_dict(orient='records') del __temp_df
这段代码是对一个名为 `__temp_df` 的数据框进行处理,并将处理结果存储在 `return_data` 字典的 `goods` 键下。
首先,根据条件 `__temp_df['show_name'] == '第三方商品'`,筛选出满足条件的行,存储在 `__df1` 中。如果 `__df1` 不为空,则对其进行数据透视操作,按照 `name` 和 `show_name` 分组,计算 `buy_num` 的总和,并重置索引。否则,保留 `__df1` 的 `name`、`show_name` 和 `buy_num` 列。
接着,根据条件 `__temp_df['show_name'] != '第三方商品'`,筛选出满足条件的行,存储在 `__df2` 中。如果 `__df2` 不为空,则对其进行数据透视操作,按照 `gt_uuid` 和 `show_name` 分组,计算 `buy_num` 的总和,并重置索引。然后,将 `__df2` 与一个包含列名为 `['gt_uuid', 'goods_name']` 的 DataFrame 进行左连接,并将结果存储在 `__df2` 中。最后,保留 `__df2` 的 `goods_name`、`show_name` 和 `buy_num` 列,并将列名 `goods_name` 改为 `name`。
接下来,通过合并 `__df1` 和 `__df2` 构成新的数据框 `__temp_df`。之后,删除 `__df1` 和 `__df2` 变量。
然后,对 `__temp_df` 进行列名的重命名,将 `name` 改为 `goods_name`,`show_name` 改为 `gc_name`,`buy_num` 改为 `num`。将 `__temp_df` 按照 `num` 降序排序。
接着,将 `__temp_df` 转换为字典格式,并将结果存储在 `return_data` 字典的 `goods_list` 键下。再次对 `__temp_df` 进行处理,只保留 `gc_name` 和 `num` 两列,并进行数据透视操作,按照 `gc_name` 分组,计算 `num` 的总和,并重置索引。最后,将结果按照 `num` 降序排序。
最后,将处理后的 `__temp_df` 转换为字典格式,并将结果存储在 `return_data` 字典的 `gc_list` 键下。最后,删除 `__temp_df` 变量。
# 用户在多少商家领取并消费优惠券 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')
阅读全文