分组后统计

99 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

分组后统计

数据统计(也称为数据聚合)是数据处理的最后一步,通常是要使每一个数组生成一个单一的数值。

上面我们已经了解了一些Pandas提供好的统计函数,例 如 :mean() 、max() 等函数 。

为大家使用更为灵活 ,pandas提供了一个 agg( )方法用来对分组后的数据进行统计。

接下来我们来体验一下,agg()方法的使用:

 import pandas as pd
 df = pd.read_excel("")
 groups = df.groupby('gender')
 for goup_name,group_id in groups:
     f_se = group_df['agg'].agg(['max','min','mean'])
     prnt('{}组的最大年龄是{},最小年龄是{},平均年龄是{}'.format(group_name,f_se[0],f_se[1],f_se[2])

观察上面的代码,可以发现在使用agg()函数时,我们可以将多个统计函数一起放到一个agg()函数中。并且需要注意的是,如果是统计函数是pandas提供的,我们只需将函数的名字以字符串的形势存储到列表中即可

例如:将max()改成'max'。

这样不仅简化了我们的代码,在添加和删减统计函数的时候我们只需更改agg()函数中list就可以了。是不是很方便。它的好处还不止这些,比如现在又有新的需求,要计算年龄的最大值和最小值的差值。但是,pandas并没有提供这样统计函数,所以就需要我们进行自己定义一个统计函数:

 def peak_range(df):
     """
     返回数值范围
     """
     return df.max()-df.min()

现在我们看一下自己定义的统计函数,如何使用

 import pandas as pd
 df = pd.read_excel("")
 groups = df.groupby('gender')
 def peak_range(df):
     """
     返回数值范围
     """
     return df.max()-df.min()
 ​
 for goup_name,group_id in groups:
     f_se = group_df['agg'].agg(['max','min','mean',peak_range()])
     print(f_se[0],f_se[1],f_se[3])

peak_range(df)函数是我们自定的函数,并设置了一个df参数,为了接收group_df['age']的值。

注意:自定义的函数名字在传入agg()函数中时不需要转换成字符串。

总结

数据分组

  • 使用groupby()方法进行分组
  • group.size()查看分组后每组的数量
  • group.groups()查看分组情况
  • group.get_group('F')根据分组后的名字选择分组数据

对分组进行遍历

  • 使用 for …in…可以对分组后的对象进行遍历
  • 遍历时刻获取两个对象,分组后的名字和对应的数据

按多列进行分组

  • 使用groupby()方法进行按多列分组
  • 将多个列名放到列表中传给groupby()做参数
  • 分组后的数据会有多层索引,获取数据需要从外到里逐层获取