数据分析笔记--pandas的分组和聚合
import pandas as pd
import numpy as np
新建一个带分组特征的DataFrame对象
分组操作 groupby
注意:只对数据集进行分组操作,将不会显示结果,只会生成一个分组的对象,只有分组后进行聚合运算才有实际结果
分组后的聚合运算
对整个数据集进行聚合运算
对data2进行分组后的聚合运算
自定义列表进行分组
自定义一个列表,个数和每列的个数相同,以这个列表为依据进行分组
多层分组
同时以两个列作为依据,进行分组,可以看到多层分组之后df对象的索引就变成了层级索引
可以对其进行数据重构,转化为Series对象,下图可能更易于理解(这是一个三层索引,最外层和第二外层a和one刚好匹配上)
GroupBy对象的高级操作
1.单层分组对象
可以发现groupby之后的对象虽然不能直接打印,但是却是一个可迭代对象,对其进行循环输出可以发现,其内部存储的数据是以元组的形式存在的,每个元组包括分组的组名(在这里也就是“a”“b”)和分组数据(还是DataFrame格式的),以此可以与python的数据进行交互
将组名和数据分别输出能看的更清楚
2.多层分组对象
将其进行多层分组,多个组名会以元组的形式存在,其数据依然是DataFrame对象
将groupBy对象转换为python数据类型
转换之后就可以进行python的数据处理了
转列表:
转字典:
根据数据类型分组
按数据类型分组时每一列的数据类型是一样的,所以需要指定axis=1,按照行来分类
根据自定义函数进行分组
定义一个匿名函数,将其传入groupby的参数,会以列索引为匿名函数的传入参数,返回的值作为分组依据
根据层级索引的索引级别进行分组
首先创建一个层级索引,有两层索引级别,分别是language和mark
然后通过该索引建立DataFrame对象,可以设置为两层列索引或两层行索引
可以指定索引级别进行分组
聚合方法
1.使用内置的聚合方法
df_obj.groupby(df_obj["L1"]).sum()--求和
------------------------------.mean()--统计平均值
------------------------------.max()--最大值
------------------------------.min()--最小值
------------------------------.size()--统计所有个数
------------------------------.count()--统计除NaN值以外的个数
------------------------------.describe()--数据总体描述
2.使用自定义聚合函数(agg)
比如想得到分组后每组的最大值和最小值之间的差值(这个内置的聚合函数是没有提供的)
3.使用多个聚合函数
也是通过agg()方法,将要使用的函数传入(内置函数需要用函数名字符串的形式传入,自定义的函数可以起别名,当然内置函数也可以起别名)
4.对不同的数据列使用不同的聚合函数
定义字典,不同的数据列对应不同的聚合函数
在agg()中传入字典,表示使用不同的聚合函数