数据透视表
数据透视表是电子表格程序和其他数据分析软件中常见的数据汇总工具。
它根据一个或多个表聚合一张表的数据,将数据在矩形格式中排列,其中一些分组键是沿着行的,另一些是沿着列的。
Python中的pandas透视表是通过groupby工具以及使用分层索引的重塑操作实现的。DataFrame拥有一个pivot_table方法,并且还有一个顶层的pandas.pivot_table函数。
除了为groupby提供一个方便接口,pivot_table还可以添加部分总计,也称为边距。
tips是一个小费数据集
假如此刻要计算一张在行方向上按day和smoker排列的分组平均值(默认的pivot_table聚合操作)的表:
只在tip和size上聚合,并根据time分组:
通过传递margins=True来扩充这个表来包含部分总计。这会添加All行和列标签,其中相应的值是单层中所有数据的分组统计值:
要使用不同的聚合函数时,将函数传递给aggfunc。例如,'count’或者len将给出一张分组大小的交叉表(计数或出现频率):
如果有空值,可以用fill_value填充:
选项名 | 描述 |
values | 需要聚合的列名;默认情况下聚合所有数值型的 列 |
index | 在结果透视表的 行 上进行分组的列名或其他分组键 |
columns | 在结果透视表的 列 上进行分组的列名或其他分组键 |
aggfunc | 聚合函数或函数列表(默认情况是’mean’);可是groupby上下文的任意有效函数aggfunc=[np.sum] / aggfunc=[np.sum, np.mean] |
fill_value | 在结果表中替换缺失值的值 |
dropna | 如果为True,将不含所有条目均为NA的 列 |
margins | 添加 行/列 小计和总计(默认为False) |
交叉表crosstab
交叉表是是数据透视表的一个特殊情况,计算的是分组中的频率。
crosstab的前两个参数可是数组、Series或数组的列表: