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

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

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

而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

python gsvd函数 python中agg函数_python gsvd函数

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

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

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

python gsvd函数 python中agg函数_数据挖掘_02

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

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

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

python gsvd函数 python中agg函数_数据挖掘_03

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

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

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

python gsvd函数 python中agg函数_数据挖掘_04

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

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)三列数据。

python gsvd函数 python中agg函数_数据_05

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

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

python gsvd函数 python中agg函数_数据挖掘_06

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

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

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

python gsvd函数 python中agg函数_python gsvd函数_07

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