pandas中groupby()函数的使用-----分组、聚合运算

       groupby(keys)函数是pandas中的一种很有用的分组运算,其可以通过参数keys指定列,通过指定的列对DataFrame进行分组,返回一个groupby对象,其是一个由对应的(name,groupby_object)元组组成的可迭代对象。分组之后,目的是为了进行每组的聚合运算,因此必须对groupby对象进行聚合运算,得到最终的DataFrame。

       如下代码运行示例,先构造一个df,然后指定keys进行分组,得到grouped,其是一个groupby对象,然后对每组求均值,可以直接调用mean()。这里只要是Series中的函数都可以直接这样调用,因为可以把每个分组直接看成是分开的Series。最后便可以得到每组对应的均值结果。这里mean()就是一个聚合运算。

df
Out[37]: 
   c1  c2  c3 keys
0   0   1   2    a
1   3   4   5    b
2   6   7   8    c
3   9  10  11    c
4  12  13  14    b
5  15  16  17    c
6  18  19  20    a
7  21  22  23    a
8  24  25  26    b

grouped=df.groupby('keys')

grouped.mean()
Out[39]: 
      c1  c2  c3
keys            
a     13  14  15
b     13  14  15
c     10  11  12

       此外,这里对每个分组进行处理的函数不一定是Series预定义的函数,还可以是自己定义的函数,然后通过groupby对象的agg()函数传入即可。如下代码示例,先自己定义了一个test函数,其作用是返回一个Series的极差。分组之后,可以通过groupby对象的agg(func)函数,其中参数func就是要传入的函数名称,之后便可以得到每组的极差。如果需要对聚合函数处理之后的列指定一个名称(如果没指定,就默认为函数名),那么可以以元组组成的列表传给参数,其中元组的第一个元素会被认为是列名,当然这里可以传入多个元组,即可以传入多个聚合函数对每组进行处理,如此处理后便会出现列的层次索引。

       如果需要对不同的列进行不同的处理,则可以传入字典,其中键值为对应的列名,值为函数名。当然,这里的值也可以是前述的元组,或者元组列表,以对同一列进行不同的处理,并且重命名。

def test(x):
    return x.max()-x.min()



grouped.agg(test)
Out[47]: 
      c1  c2  c3
keys            
a     21  21  21
b     21  21  21
c      9   9   9

       如果是对有多层次索引的DataFrame,也可以通过groupby()的level参数指定哪一个层次的索引进行分组,这个level参数可以是层次索引的名称标签,也可以是在层次索引中的位置。 

       groupby()函数对DataFrame先分组,然后再通过预定义的或者自定义的聚合函数进行每组的运算,最后得到以分组的列为索引的DataFrame;这是数据处理中很常用的一个过程,对于这个过程,pandas中可以直接通过groupby()函数实现,即高效又简便。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值