您的位置: 网站首页> Pandas教程> 当前文章
groupby后agg同1列用多个聚合函数、不同列用不同函数、自定义函数
老董-我爱我家房产SEO2022-02-04171围观,136赞
上一篇文章展示了利用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。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
groupby后agg同1列用多个聚合函数、不同列用不同函数、自定义函数文章写得不错,值得赞赏


