ppython3 关于agg函数的用法(一般与groupby函数连用)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24753293/article/details/80323487


为了了解agg这个函数 我们先以下数据集作为研究对象 (截图的一部分)

agg:这里一般都与groupby函数作为比较 

pandas引入了agg函数,它提供基于列的聚合操作。而groupby可以看做是基于行,或者说index的聚合操作


通过这里介绍我们可以交接 groupby函数是基于行操作的 而agg是基于列操作的

这个说可能太抽象,什么是行操作 什么是列操作呢

最简单的理解就是 基于行操作 我可以进行分类(比如一个班名单 所有180以上的是一组 160-180是一组 低于160是一组)如果实现这个过程 我们是每一行每一行就行查找,查看符合什么条件 然后分组。这就是groupby函数最简单的理解 而我们分好组以后 想得到每一组的平均值咋办 一般我们是着用操作的 选择一个组之后 把他们所有身高都加起来 然后除以该组人数。那么问题来了 不管是身高和还是平均值 我们都是进行列操作的 即我们是从上至下加起来的 而不是从左到右。为了计算简便 我们引入了agg函数。

import pandas as pd
import numpy as np

path_df_part_1 = r'C:\Users\yang\Desktop\ceshi.csv'   #时间11.22-11.27的数据

path_df = open(path_df_part_1, 'r')
try:
    df_part_1 = pd.read_csv(path_df, index_col = False, parse_dates = [0])
    df_part_1.columns = ['user_id','item_id','behavior_type','item_category']
finally:
    path_df.close()

df_part_1['cumcount'] = df_part_1.groupby(['user_id', 'behavior_type']).cumcount()#
df_part_1_u_b_count_in_6 = df_part_1.drop_duplicates(['user_id','behavior_type'], 'last') 
#相当于保存的最大的那个计数的  因为 0 1 2 3 4 5 6 这些计数前面都是重复的  保留最后一个即可。drop_duplicate函数括号里面的完全重复才算重复项
#完全重复就代表 user_id 与 behavior_type 完全相同 然后保留last最后u一个项

df_part_1_u_b_count_in_6 = pd.get_dummies(df_part_1_u_b_count_in_6['behavior_type']).join(df_part_1_u_b_count_in_6[['user_id','cumcount']])
#把1 2 3 4类型的进行热编码 变成0001 0010 0100 1000类型

df_part_1_u_b_count_in_6.rename(columns = {1:'behavior_type_1',
                                            2:'behavior_type_2',
                                           3:'behavior_type_3',
                                            4:'behavior_type_4'}, inplace=True)
#只是对热编码的columns重新命名  便于以后取值 因为分成了单独的列了print(df_part_1)
df_part_1_u_b_count_in_6['u_b1_count_in_6'] = df_part_1_u_b_count_in_6['behavior_type_1'] * (df_part_1_u_b_count_in_6['cumcount']+1)#统计用户点击操作总数
df_part_1_u_b_count_in_6['u_b2_count_in_6'] = df_part_1_u_b_count_in_6['behavior_type_2'] * (df_part_1_u_b_count_in_6['cumcount']+1)#统计用户收藏操作总数
df_part_1_u_b_count_in_6['u_b3_count_in_6'] = df_part_1_u_b_count_in_6['behavior_type_3'] * (df_part_1_u_b_count_in_6['cumcount']+1)#统计用户购物车操作总数
df_part_1_u_b_count_in_6['u_b4_count_in_6'] = df_part_1_u_b_count_in_6['behavior_type_4'] * (df_part_1_u_b_count_in_6['cumcount']+1)#统计用户购买操作总数
★print(df_part_1_u_b_count_in_6)
df_part_1_u_b_count_in_6 = df_part_1_u_b_count_in_6.groupby('user_id').agg({'u_b1_count_in_6': np.sum,
                                                                             'u_b2_count_in_6': np.sum,
                                                                             'u_b3_count_in_6': np.sum,
                                                                             'u_b4_count_in_6': np.sum})



★ print(df_part_1_u_b_count_in_6)

为了更容易看懂程序 我们做了标记 第一个五角星输出的是刚开始我们给的数据图

第二个五角星输出如下 



通过对比可以发现  以前  0 1 2 3数据的值 都统计在一个数据里面了 

阅读更多

没有更多推荐了,返回首页