您的位置: 网站首页> Pandas教程> 当前文章

groupby后agg同1列用多个聚合函数、不同列用不同函数、自定义函数

老董-我爱我家房产SEO2022-02-04173围观,139赞

  上一篇文章展示了利用groupby做分组聚合的一些常规情形,如果想全面了解分组聚合的场景,可以参考文章pandas之groupby使用详解。如果想实现复杂一些的分组计算则需要借助agg函数,DataFrameGroupBy对象和 DataFrame本身都可以使用agg函数,其中pandas.core.groupby.GroupBy.agg官方文档示意如下:

  GroupBy.agg(func,*args,**kwargs)

  我们演示三种分组经计算情形:1个或多个列使用多个分组聚合函数;不同的列使用不同的函数分组聚合;使用自定义函数分组聚合。

  1)1个或多个列使用多个分组聚合函数(内置函数直接以字符串传入即可)

# -*- coding:UTF-8 -*-
import pandas as pd

df = pd.DataFrame({'name': ['张飞', '刘备','悟空', '唐僧'],
                   'book':['三国','三国','西游','西游'],
                   'level':[10,8,100,99],
                   'age':[50,52,500,550]
                   })
df_res = df.groupby('book').agg({'age':['sum','mean']})
df_res2 = df.groupby('book').agg(['sum','mean'])
print(df_res)
print('------')
print(df_res2)
       age       
       sum   mean
book             
三国     102   51.0
西游    1050  525.0
------
     level         age       
       sum  mean   sum   mean
book                         
三国      18   9.0   102   51.0
西游     199  99.5  1050  525.0

  2)不同的列使用不同的函数分组聚合(内置函数直接以字符串传入即可)

# -*- coding:UTF-8 -*-
# -*- coding:UTF-8 -*-
import pandas as pd

df = pd.DataFrame({'name': ['张飞', '刘备','悟空', '唐僧'],
                   'book':['三国','三国','西游','西游'],
                   'level':[10,8,100,99],
                   'age':[50,52,500,550]
                   })
df_res = df.groupby('book').agg({'age':['sum','mean'],'level':['max']})
print(df_res)
       age        level
       sum   mean   max
book                   
三国     102   51.0    10
西游    1050  525.0   100

  3)使用自定义函数分组聚合

  对于自定义函数,其传入函数的参数是每个子组的列,逐列进行传入,自定义函数不能以字符串的形式传入agg函数中,要直接以函数名传入。

# -*- coding:UTF-8 -*-
import pandas as pd

def func(ser_col):
    value = ser_col.max() - ser_col.min()
    return value

df = pd.DataFrame({'name': ['张飞', '刘备','悟空', '唐僧'],
                   'book':['三国','三国','西游','西游'],
                   'level':[10,8,100,99],
                   'age':[50,52,500,550]
                   })
df_res = df.groupby('book').agg({'age':[func],'level':lambda x:x.max()-x.min()})
print(df_res)
      age    level
     func <lambda>
book              
三国      2        2
西游     50        1

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    groupby后agg同1列用多个聚合函数、不同列用不同函数、自定义函数文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200