数据分析笔记--pandas的分组和聚合

import pandas as pd

import numpy as np

新建一个带分组特征的DataFrame对象

数据分析笔记--pandas的分组和聚合

分组操作  groupby

注意:只对数据集进行分组操作,将不会显示结果,只会生成一个分组的对象,只有分组后进行聚合运算才有实际结果

数据分析笔记--pandas的分组和聚合

分组后的聚合运算 

对整个数据集进行聚合运算

数据分析笔记--pandas的分组和聚合

对data2进行分组后的聚合运算

数据分析笔记--pandas的分组和聚合

自定义列表进行分组

自定义一个列表,个数和每列的个数相同,以这个列表为依据进行分组

数据分析笔记--pandas的分组和聚合

多层分组

同时以两个列作为依据,进行分组,可以看到多层分组之后df对象的索引就变成了层级索引

数据分析笔记--pandas的分组和聚合

可以对其进行数据重构,转化为Series对象,下图可能更易于理解(这是一个三层索引,最外层和第二外层a和one刚好匹配上)

数据分析笔记--pandas的分组和聚合


GroupBy对象的高级操作

1.单层分组对象

可以发现groupby之后的对象虽然不能直接打印,但是却是一个可迭代对象,对其进行循环输出可以发现,其内部存储的数据是以元组的形式存在的,每个元组包括分组的组名(在这里也就是“a”“b”)和分组数据(还是DataFrame格式的),以此可以与python的数据进行交互

数据分析笔记--pandas的分组和聚合

将组名和数据分别输出能看的更清楚

数据分析笔记--pandas的分组和聚合

2.多层分组对象

将其进行多层分组,多个组名会以元组的形式存在,其数据依然是DataFrame对象

数据分析笔记--pandas的分组和聚合

数据分析笔记--pandas的分组和聚合

将groupBy对象转换为python数据类型

转换之后就可以进行python的数据处理了

转列表:

数据分析笔记--pandas的分组和聚合

转字典:

数据分析笔记--pandas的分组和聚合


根据数据类型分组

按数据类型分组时每一列的数据类型是一样的,所以需要指定axis=1,按照行来分类

数据分析笔记--pandas的分组和聚合


根据自定义函数进行分组

定义一个匿名函数,将其传入groupby的参数,会以列索引为匿名函数的传入参数,返回的值作为分组依据

数据分析笔记--pandas的分组和聚合


根据层级索引的索引级别进行分组

首先创建一个层级索引,有两层索引级别,分别是language和mark

数据分析笔记--pandas的分组和聚合

然后通过该索引建立DataFrame对象,可以设置为两层列索引或两层行索引

数据分析笔记--pandas的分组和聚合

可以指定索引级别进行分组

数据分析笔记--pandas的分组和聚合



聚合方法

1.使用内置的聚合方法

df_obj.groupby(df_obj["L1"]).sum()--求和

------------------------------.mean()--统计平均值

------------------------------.max()--最大值

------------------------------.min()--最小值

------------------------------.size()--统计所有个数

------------------------------.count()--统计除NaN值以外的个数

------------------------------.describe()--数据总体描述


2.使用自定义聚合函数(agg)

比如想得到分组后每组的最大值和最小值之间的差值(这个内置的聚合函数是没有提供的)

数据分析笔记--pandas的分组和聚合

3.使用多个聚合函数

也是通过agg()方法,将要使用的函数传入(内置函数需要用函数名字符串的形式传入,自定义的函数可以起别名,当然内置函数也可以起别名)

数据分析笔记--pandas的分组和聚合


4.对不同的数据列使用不同的聚合函数

定义字典,不同的数据列对应不同的聚合函数

在agg()中传入字典,表示使用不同的聚合函数

数据分析笔记--pandas的分组和聚合

数据分析笔记--pandas的分组和聚合