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

pandas的groupby单列多列分组聚合运算

老董-我爱我家房产SEO2022-01-28191围观,116赞

  本文是1个关于groupby的知识点,如果想全面了解分组聚合的场景,可以参考文章pandas之groupby使用详解

  本文介绍下pandas的groupby分组聚合的基础的操作,pandas官方文档上groupby的介绍如下:

	  DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,
squeeze=NoDefault.no_default,observed=False,dropna=True)

  一般而言by参数最常用,by参数可以传入1列或者多列,df按列分组后是DataFrameGroupBy对象,该对象可以直接调用各种聚合函数或者属性求每组数据的(最大max()、最小min()、均值mean()、求和sum()、数量大小size属性、。

  1、单列分组聚合

  从分组聚合结果来看,非数值类的列pandas默认会依据不同的聚合函数而灵活处理,按什么列分组默认该列会被作为结果的索引。

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

df = pd.DataFrame({'Animal': ['Falcon', 'Falcon','Parrot', 'Parrot'],
                   'Max Speed': [380, 370, 24, 26],
                   'age':[20,30,40,50],'size':['small','small','big','big']
                   })
print(df.groupby(['Animal']).mean())
print('-----------------------')
print(df.groupby(['Animal']).max())
        Max Speed   age
Animal                 
Falcon      375.0  25.0
Parrot       25.0  45.0
-----------------------
        Max Speed  age   size
Animal                       
Falcon        380   30  small
Parrot         26   50    big

  2、多列分组聚合

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

df = pd.DataFrame({'Animal': ['Falcon', 'Falcon','Parrot', 'Parrot'],
                   'Max Speed': [380, 370, 24, 26],
                   'age':[20,30,40,50],'size':['small','small','big','big']
                   })
print(df.groupby(['Animal','size']).mean())
print('-----------------------')
print(df.groupby(['Animal','size']).max())
             Max Speed   age
Animal size                  
Falcon small      375.0  25.0
Parrot big         25.0  45.0
-----------------------
              Max Speed  age
Animal size                 
Falcon small        380   30
Parrot big           26   50

  3、DataFrameGroupBy对象指定某几个列做聚合

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

df = pd.DataFrame({'Animal': ['Falcon', 'Falcon','Parrot', 'Parrot'],
                   'age':[20,30,40,50],
                   'size':[80,90,100,110],
                   'height':[200,210,220,230]
                   })
print(df.groupby('Animal')[['size','height']].min())
        size  height
Animal              
Falcon    80     200
Parrot   100     220

  4、如果不想让被分组的列作为结果的索引,可以把as_index参数设为False。

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

df = pd.DataFrame({'Animal': ['Falcon', 'Falcon','Parrot', 'Parrot'],
                   'Max Speed': [380, 370, 24, 26],
                   'age':[20,30,40,50],'size':['small','small','big','big']
                   })
print(df.groupby(['Animal'],as_index=False).min())
   Animal  Max Speed  age   size
0  Falcon        370   20  small
1  Parrot         24   40    big

  5、上述分组聚合只适合简单的情形,如果想实现复杂一些的分组计算,如:

  1)1个列使用多个函数分组聚合

  2)不同的列使用不同的函数分组聚合

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

  实现上述效果,可以参考分组聚合使用agg函数

很赞哦!

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

文章评论

    pandas的groupby单列多列分组聚合运算文章写得不错,值得赞赏

站点信息

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