第十章主要讲解的数据聚合与分组操作。对数据集进行分类,并在每一个组上应用一个聚合函数或者转换函数,是常见的数据分析的工作。
本文结合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()