Pandas---8.聚合与分组

一、分组

1.分组运算的过程为:拆分-应用-合并

  1. 拆分阶段:Series/DataFrame等数据根据你提供的一个或者多个键,被拆分为多组
  2. 应用阶段:根据你提供的一个函数应用到这些分组上
  3. 合并阶段:将函数的执行结果合并到最终结果中

2.分组中有两种数据:源数据(被分组的对象),分组数据(用于划分源数据的)

  1. 源数据每一行(axis=0) 对应于分组数据中的一个元素。分组数据中每一个唯一值对应于一个分组。
  2. 当分组数据也在源数据中时,可以直接通过指定列名来指定分组数据(值相同的为同一组)。

3.Series/DataFrame.groupby

Series/DataFrame.groupby()方法是分组方法:

Series/DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, 
  group_keys=True, squeeze=False, **kwargs)

参数:

  1. by:一个mapping functionlist of function、一个字典、一个序列、一个元组、一个list of column name。它指定了分组数据。

    1. 如果传入了函数,则在每个index value上调用函数来产生分组数据

    2. 如果是Series或者字典,则根据每个index value在字典/Series中的值来产生分组数据

    3. 如果是个column label,则使用该label抽取出来的一列数据产生分组数据

    4. 如果是个column labellist,则使用一组column label抽取出来的多列数据作为分组数据。

    5. 如果是个序列,则它直接指定了分组数据。

    6. 如果是个序列的序列,则使用这些序列拼接成一个MulitiIndex,然后根据这个MultiIndex替换掉index后,根据label value来分组。(事实上并没有替换,只是用于说明这个过程)

      如果axis=1,则index label替换成column label

  2. axis:指定沿着哪个轴分组。可以为0/'index',表示沿着 0轴。可以为1/'columns',表示沿着 1轴

  3. level:一个整数、level name或者其序列。如果axis是个MultiIndex,则在指定级别上的索引来分组

  4. as_index:一个布尔值。如果为True,则将group label作为输出的index。如果为False,则输出是SQL风格的分组(此时分组的key作为一列,而不是作为index)。Series中,该参数必须为True

  5. sort:一个布尔值。如果为True,则对分组的键进行排序。

  6. group_keys:一个布尔值。如果为True,且调用了函数来决定分组,则添加分组键来区分不同的数据(否则你不知道每一行数据都对应于哪里)

  7. squeeze:一个布尔值。如果为True,则尽可能的缩减结果的类型。

该函数返回一个GroupBy对象。

2. GroupBy对象

3. 分组级运算

4. 透视表和交叉表

原文地址:https://www.cnblogs.com/nxf-rabbit75/p/12108490.html