【Python数据科学手册】Pandas——九、累计与分组groupby

九、累计与分组

1.获取数据

本节用一份Seaborn 程序库行星数据来进行演示(planets)
在这里插入图片描述

2.Pandas的简单累计功能

df.sum(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs)
在这里插入图片描述
describe() 方法可以计算每一列的若干常用统计值
在这里插入图片描述
Pandas的累计方法

指标 描述
count() 计数项
first()、 last() 第一项与最后
mean()、 median() 均值与中位数
min()、 max() 最小值与最大
std()、 var() 标准差与方差
mad() 均值绝对偏差
prod() 所有项乘积
sum() 所有项求和

3.GroupBy: 分割splite、 应用apply和组合combine

df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)

1)分割、应用和组合

GroupBy 的用处就是将这些分割、应用和组合步骤进行抽象:用户不需要知道在底层如何计算,只要把操作看成一个整体就够了.
在这里插入图片描述

返回的是一个 DataFrameGroupBy 对象,是一种特殊形式的 DataFrame,里面隐藏着若干组数据,但是在没有应用累计函数之前不会计算

2)GroupBy对象

GroupBy 对象是一种非常灵活的抽象类型,可以将它看成是 DataFrame的集合,在底层解决所有难题

(1)、按列取值

df.info()可以查看DataFrame数据类型
在这里插入图片描述

从原来的 DataFrame 中取某个列名作为一个 Series 组。与 GroupBy 对象一样,直到我们运行累计函数,才会开始计算
在这里插入图片描述

(2)、按组迭代

GroupBy 对象支持直接按组进行迭代,返回的每一组都是 Series 或 DataFram
在这里插入图片描述

(3)、 调用方法

在这里插入图片描述

3)累计aggregate()、 过滤filter()、 转换transform()和应用apply()

在这里插入图片描述

(1)、累计aggregate()/agg()

df.aggregate(func, axis=0, *args, **kwargs)
aggregate() 比起sum() 和 median() 之类的简单函数可以支持更复杂的操作,比如字符串、函数或者函数列表,并且能一次性计算所有累计值
缩写agg()
参数func:function, string, dictionary, or list of string/functions
- string function name.
- function.
- list of functions.
- dict of column names -> functions (or list of functions).
在这里插入图片描述

另一种用法就是通过 Python 字典指定不同列需要累计的函数
在这里插入图片描述
对应SQL
在这里插入图片描述

(2)、过滤filter()

过滤操作可以让你按照分组的属性丢弃若干数据。
df.filter(items=None, like=None, regex=None, axis=None)
在这里插入图片描述
传入df输出df,
分组求完std值后跟4比较,不满足>4要求的只有A组,因此在原DF中剔除A组的数据,返回的是原DF筛选结果后的数据,不是分组后的DataFrameGroupBy
SQL类似(但SQL中求标准差结果异常)
在这里插入图片描述
filter() 函数会返回一个布尔值,表示每个组是否通过过滤

(3)、转换transform()

df.transform(func, *args, **kwargs)
累计操作返回的是对组内全量数据缩减过的结果,而转换操作会返回一个新的全
量数据。数据经过转换之后,其形状与原来的输入数据是一样的。
在这里插入图片描述
传入df输出df
对应SQL
在这里插入图片描述

(4) apply() 方法
  • 基础的应用函数
    在这里插入图片描述
    在这里插入图片描述
  • 分组中的apply
    在这里插入图片描述
    对应SQL
    在这里插入图片描述

4)设置分割的键

by : mapping, function, label, or list of labels
Used to determine the groups for the groupby.
If by is a function, it’s called on each value of the object’s
index. If a dict or Series is passed, the Series or dict VALUES
will be used to determine the groups (the Series’ values are first
aligned; see .align() method). If an ndarray is passed, the
values are used as-is determine the groups. A label or list of
labels may be passed to group by the columns in self. Notice
that a tuple is interpreted a (single) key.

(1)将列表、数组、Series或索引作为分组建

df外重新定义分组依据
在这里插入图片描述

(2)用字典或 Series 将索引映射到分组名称

df.set_index()将列转化成索引
借用原索引,设置映射,重新分组
在这里插入图片描述

(3)任意 Python 函数

在这里插入图片描述

(4) 多个有效键构成的列表(多重分组)

任意之前有效的键都可以组合成一个列表,进行分组,从而返回一个多级索引的分组结果
在这里插入图片描述

5)分组案例

series.astype()转换数据类型
series.unstack() 方法可以快速将一个多级索引的Series 转化为普通索引的 DataFrame
df.T可以转置
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章