如何使用agg函数对数据进行分组聚合

本文介绍了如何使用Pandas的agg函数对数据进行列聚合操作,相较于groupby函数,agg更加简洁且灵活。举例展示了如何计算各城市数据的均值和总和,以及如何对不同列应用不同的聚合函数。此外,还提到了可以使用自定义函数进行聚合,并演示了groupby和agg函数的联合使用方法。
摘要由CSDN通过智能技术生成

转载自知乎:侦探L  如何使用agg函数对数据进行分组聚合 - 知乎

在上篇文章中,我们详细地介绍了如何使用groupby函数对数据进行分组。而在python的数据分组中,除了groupby函数之外,agg函数也是我们使用pandas进行数据分析过程中,针对数据分组常用的一条函数。而今天我们就来介绍一下agg函数的用法。

如果说用groupby进行数据分组,可以看做是基于行(或者说是index)操作的话,则agg函数则是基于列的聚合操作。

从实现上看,groupby返回的是一个DataFrameGroupBy结构,这个结构必须调用聚合函数(如sum)之后,才会得到结构为Series的数据结果。在之前关于groupby函数的使用中,大家应该也看出来了,每次用groupby函数后,都是要接类似sum、mean等聚合函数才能输出。

侦探L:如何使用groupby函数对数据进行分组(1)27 赞同 · 1 评论文章正在上传…重新上传取消

而agg是DataFrame的直接方法,返回的也是一个DataFrame。当然,很多功能用sum、mean等等也可以实现。但是agg更加简洁, 而且传给它的函数可以是字符串,也可以自定义,参数是column对应的子DataFrame。

下面我们举几个例子,让大家对agg函数有更直观的体会。

首先,还是一样先建立我们实验要用的数据表。

cities = pd.DataFrame(np.random.randn(5, 5),
     index=['a', 'b', 'c', 'd', 'e'],
     columns=['shenzhen', 'guangzhou', 'beijing', 'nanjing', 'haerbin'])
cities.iloc[2:4,2:4] = np.nan 
cities

可以看到,这是一个列标签为城市名、包含了几个缺失值的数据表。

如果这个时候,我们想看一下按城市分组,然后查看一下各个城市下数据的均值(mean)和总和(sum)呢,应该怎么做呢?

可以有些同学会以下这么做:

好像确实可以这么做,不过如果我们还要再统计个数,中位数这些呢?一个个地打好像可以,但是总觉得十分麻烦。有没有什么更简便的做法呢?答案就是用agg函数

针对我们上面的例子,我们用agg函数再做一次:

cities[['shenzhen','guangzhou','beijing','nanjing','haerbin']].agg(['sum','mean'])

一次完成!是不是简便得多。

与此同时,对于上面的数据表,我们还可以针对不同的城市,使用不同的聚合函数,只要指定一下就好了:

cities.agg({'shenzhen':['sum'],'beijing':['mean'],'nanjing':['sum','mean']})

可以看到,没指定的城市及函数就没有被输出出来~

groupby函数和agg函数的联用

在我们用pandas对数据进行分组聚合的实际操作中,很多时候会同时使用groupby函数和agg函数。下面我们重新建立一个数据表,然后实验一下:

df = pd.DataFrame({'Country':['China','China', 'India', 'India', 'America', 'Japan', 'China', 'India'], 
 
                   'Income':[10000, 10000, 5000, 5002, 40000, 50000, 8000, 5000],
 
                    'Age':[50, 43, 34, 40, 25, 25, 45, 32]})
df

可以看到在我们的数据表中,有国家(Country)、工资(Income)、年龄(Age)三列数据。

下面我们同时使用groupby和agg函数对该数据表进行分组聚合操作。

df_inc=df.groupby('Country').agg(['min','max','mean'])
df_inc

我们从上述结果可以看到,原本的数据表按照“国家(Country)”进行了分组及相应的聚合方式。

有些时候我们只需要对部分数据进行不同的聚合操作,此时就可以通过字典的方式来实现。比如说下面这样:

df_age={'Age':['max','min','mean']}
df.groupby('Country').agg(df_age)

在我们对数据进行聚合的过程中,除了使用sum()、max()等系统自带的聚合函数之外,,大家也可以使用自己定义的函数,使用方法也是一样的~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值