6.python数据分析交叉制表与数据透视表总结
**数据集 **
import pandas as pd
import numpy as np
an=pd.DataFrame({'id':['01','01','01','01','01','02','02','02','02','02','03','03','03','03','03','04','04','04','04','04','04'],'name':['A','B','C','D','E','C','D','E','A','B','A','B','C','D','E','A','B','C','D','E','E'],
'num':[20,23,23,33,32,19,20,20,56,32,12,16,27,42,61,21,23,25,32,12,13]})
一.行索引转列索引:unstack()函数
**扩展:**stack()函数,列索引转行索引
#如有索引组合列有重复数据,需先groupby+聚合函数去重
an_group=an.groupby(by=['id','name']).sum().reset_index()
#设置索引,set_index得到的都是行索引
an_1=an_group.set_index(['id','name'])
#unstack将'id'列设置成列索引
an_1.unstack('id')
print(an_1)
二. 透视表提供的pivot_table 方法
数据透视表是数据分析中常见的工具之一,根据一个或多个键值对数据进行聚合,根据行或列的分组将数据划分到各个区域中。说到分组,除了之前所用到的groupby函数,直接使用透视表提供的pivot_table 方法更加方便。
默认显示mean平均值,如需其他类型聚合,可在参数aggfunc中设置
ans_2=pd.pivot_table(an[['id','name','num']],index=['name'],columns=['id'],aggfunc=np.sum)
print(ans_2)
三. 交叉表crosstab函数
交叉表是一种特殊的透视表,主要用于计算分组频率。利用pandas提供的crosstab函数可以制作交叉表。
交叉表是透视表的一种,crosstab函数的参数和pivot_table的函数基本相同。不同之处在于crosstab函数中的index、columns、values,输入的都是从DataFrame中提取的某一列。
ans_3=pd.crosstab(values=an['num'],index=an['name'],columns=an['id'],aggfunc=np.sum)
print(ans_3)