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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jakob_Hu/article/details/88808283

分组运算的标准术语**“拆分—应用—合并”(split-apply-combine)**,具体如下图,
在这里插入图片描述
pandas对象的分组与聚合使用的是 groupby方法

参数解读

在这里插入图片描述
在这里插入图片描述

基本使用

首先构建如下DataFrame对象,
在这里插入图片描述

1)Series分组

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

2)DataFrame的分组

依旧使用最开始构建的DataFrame,
在这里插入图片描述
使用一列或多列对DataFrame进行分组的方式与Series分组方式是相同的。
在这里插入图片描述

GroupBy对象size方法

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

分组进行迭代

groupby方法产生的GroupBy对象支持迭代,产生一组二元tuple,
在这里插入图片描述
在这里插入图片描述
如果是多个列同时进行分组,则GroupBy对象的tuple的第一个元素是个tuple,
在这里插入图片描述

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

使用dtype对列进行分组,
在这里插入图片描述
因为是按列进行分组,所以是在水平方向上进行拆分。故axis参数值为1。

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

选取一列进行运算,
在这里插入图片描述
上面的一行代码实际上可以分为两步进行理解,
在这里插入图片描述

使用字典或者Series进行分组

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

1)字典形式进行分组

在这里插入图片描述
创建一个用于分组的字典,字典的键值可以不与DataFrame的列名数目相等,
在这里插入图片描述
在这里插入图片描述

2)Series形式进行分组

在这里插入图片描述
在这里插入图片描述

通过函数进行分组

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

依据索引级别进行分组

当Dataframe和Series存在层级化索引时,使用 groupby方法的 level参数可以指定使用哪一层索引进行分组,
在这里插入图片描述
上面的代码依据 cty 这一层列索引将DataFrame在水平方向上进行分组。

猜你喜欢

转载自blog.csdn.net/Jakob_Hu/article/details/88808283