前言
接上一篇,pandas.pivot_table是生成透视图,可以对数据进行行列的任意分组转置等操作,很方便。而crosstab则是一种特殊的透视表。
pandas.crosstab介绍
***crosstab***是交叉表,默认是计算分组频率的特殊透视表(默认的聚合函数是统计行列组合出现的次数)。如果指定了聚合函数则按聚合函数来统计,但是要指定values的值,指明需要聚合的数据。
函数原型如下:
pandas.crosstab(index, columns**,** values=None**,** rownames=None**,** colnames=None**,** aggfunc=None**,** margins=False**,** margins_name: str = 'All’, dropna: bool = True**,** normalize=False**)** → ‘DataFrame’
index:指定了要分组的列,最终作为行。
columns:指定了要分组的列,最终作为列。
values:指定了要聚合的值(由行列共同影响),需要指定aggfunc参数。
rownames:指定了行名称。
colnames:指定了列名称。
aggfunc:指定聚合函数。必须指定values的值。
margins:布尔值,是否分类统计。默认False。
margins_name:分类统计的名称,默认是“All”。
dropna:是否包含全部是NaN的列。默认是True。
normalize:标准化统计各行列的百分比。如果传all或者True,将输出当前值对所有值得百分比(分母是所有行列的值)。如果传“index”则对行进行百分比统计。如果传“columns”则对列进行百分比统计。如果margins为True,将会把All的值也计算在内进行百分比统计。PS:实际使用过程中,在指定margins=True的时候,把columns设置为一个series没有问题,但是当换成数组的时候这里报错说All不在DataFrame里面。奇怪,有理解深刻的同学请指点,不胜感激。
参考链接
- https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.crosstab.html?highlight=crosstab