
第十章主要讲解的数据聚合与分组操作。对数据集进行分类,并在每一个组上应用一个聚合函数或者转换函数,是常见的数据分析的工作。
本文结合pandas的官方文档整理而来。

组操作的术语:拆分-应用-联合split-apply-combine。分离是在特定的轴上进行的,axis=0表示行,axis=1表示列。
分组聚合示意图

Parameters参数
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 as a (single) key.
Returns返回值
分组键可以是多种形式,并且键不一定是完全相同的类型:
DataFrame列名的值Series语法糖现象:
df.groupby('key1')['data1']
df['data1'].groupby(df['key1'])DataFrame;如果传递的是单个列名,则返回的是Series。df.groupby(['key1','key2'])[['data2']].mean() # 传递列表形式
df.groupby(['key1','ley2'])['data2'].mean() # 传递的是单个列名聚合指的是所有根据数组产生标量值的数据转换过程。常见的聚合函数:
aggregate或者agg方法

笔记1:自定义的聚合函数通常比较慢,需要额外的开销:函数调用、数据重新排列等
import numpy as np
import pandas as pd
tips = pd.read_csv(path)
tips['tip_pct'] = tips['tip'] / tips['total_bill']
grouped = tips.groupby(['day','smoker']) # 根据两个属性先分组
grouped_pct = grouped['tip_pct']
grouped_pct.agg('mean') # 函数名通过字符串的形式传递

name将会被作为DF数据的列名:

笔记2:只有当多个函数应用到至少一个列时,DF才具有分层列
groupby传递as_index=False来实现DF中的pivot-table方法能够实现透视表,默认求的是平均值mean。交叉表是透视表的特殊情况

另一种方法:groupby+mean

透视表中常用的几个参数:


三种不同的方式来实现
df.groupby([pd.Grouper(level=1), 'A']).sum()
# df.groupby([pd.Grouper(level='second'), 'A']).sum()
# df.groupby(['second', 'A']).sum()
