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

本文介绍了Pandas中agg函数的应用场景与操作方法,并通过一个实际案例展示了如何使用agg函数来处理数据集,包括数据分组、聚合计算等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


为了了解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数据的值 都统计在一个数据里面了 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值