数据的分组运算(GroupBy)——基础篇

数据的分组运算—groupby

  • 参数解读
  • 基本使用
    • 1)Series分组
    • 2)DataFrame的分组
  • GroupBy对象size方法
  • 分组进行迭代
  • 依据每列数据类型进行分组
  • 分组后选取一个或一组列进行运算
  • 使用字典或者Series进行分组
    • 1)字典形式进行分组
    • 2)Series形式进行分组
  • 通过函数进行分组
  • 依据索引级别进行分组

分组运算的标准术语**“拆分—应用—合并”(split-apply-combine)**,具体如下图,
数据的分组运算(GroupBy)——基础篇_第1张图片
pandas对象的分组与聚合使用的是 groupby方法

参数解读

在这里插入图片描述
数据的分组运算(GroupBy)——基础篇_第2张图片

基本使用

首先构建如下DataFrame对象,
数据的分组运算(GroupBy)——基础篇_第3张图片

1)Series分组

使用 key1 这一列对 data1 这一列进行分组,通过by参数将 key1 这一列传入,
在这里插入图片描述
这个GroupBy对象只包含了分组的中间数据,具有进一步分组进行运算的能力。
数据的分组运算(GroupBy)——基础篇_第4张图片
聚合得到的是一个索引为key1列唯一值,索引列名也为“key1”的对象,groupby方法同样支持根据多个不同的列进行分组
数据的分组运算(GroupBy)——基础篇_第5张图片
根据多个列进行分组后得到的是层次化索引,可以看做是两列不同元素之间构成的笛卡尔积。可以使用unstack方法去除堆叠,
数据的分组运算(GroupBy)——基础篇_第6张图片
分组也支持使用长度与DataFrame行数等长的numpy数组、列表进行分组,
数据的分组运算(GroupBy)——基础篇_第7张图片

2)DataFrame的分组

依旧使用最开始构建的DataFrame,
数据的分组运算(GroupBy)——基础篇_第8张图片
使用一列或多列对DataFrame进行分组的方式与Series分组方式是相同的。
数据的分组运算(GroupBy)——基础篇_第9张图片

GroupBy对象size方法

GroupBy对象的size方法有时候是很有用的,它能返回各个分组的大小,
在这里插入图片描述
在这里插入图片描述

分组进行迭代

groupby方法产生的GroupBy对象支持迭代,产生一组二元tuple,
数据的分组运算(GroupBy)——基础篇_第10张图片
数据的分组运算(GroupBy)——基础篇_第11张图片
如果是多个列同时进行分组,则GroupBy对象的tuple的第一个元素是个tuple,
数据的分组运算(GroupBy)——基础篇_第12张图片

依据每列数据类型进行分组

使用dtype对列进行分组,
数据的分组运算(GroupBy)——基础篇_第13张图片
因为是按列进行分组,所以是在水平方向上进行拆分。故axis参数值为1。

分组后选取一个或一组列进行运算

选取一列进行运算,
数据的分组运算(GroupBy)——基础篇_第14张图片
上面的一行代码实际上可以分为两步进行理解,
数据的分组运算(GroupBy)——基础篇_第15张图片

使用字典或者Series进行分组

除了numpy数组,分组的信息还可以以其他形式存在。不同于numpy数组,字典和Series不要求一定与Dataframe或者Series等长,通过键值和索引匹配即可,

1)字典形式进行分组

数据的分组运算(GroupBy)——基础篇_第16张图片
创建一个用于分组的字典,字典的键值可以不与DataFrame的列名数目相等,
在这里插入图片描述
数据的分组运算(GroupBy)——基础篇_第17张图片

2)Series形式进行分组

数据的分组运算(GroupBy)——基础篇_第18张图片
数据的分组运算(GroupBy)——基础篇_第19张图片

通过函数进行分组

任何用于分组的函数都会在各个索引上执行一次,函数返回值会被用作分组的名称,
数据的分组运算(GroupBy)——基础篇_第20张图片
使用 len方法对DataFrame进行分组,
在这里插入图片描述
在这里插入图片描述
函数与数组、字典、列表、Series等序列混合使用,
数据的分组运算(GroupBy)——基础篇_第21张图片
混合使用后生成的是层次化索引。

依据索引级别进行分组

当Dataframe和Series存在层级化索引时,使用 groupby方法的 level参数可以指定使用哪一层索引进行分组,
数据的分组运算(GroupBy)——基础篇_第22张图片
上面的代码依据 cty 这一层列索引将DataFrame在水平方向上进行分组。

你可能感兴趣的:(Pandas)