一、透视表
透视表(pivottable)是各种电子表格程序和其他数据分析软件中一种常见的数据汇总工具。它根据一个或多个键对数据进行聚合,并根据行和列上得分组建将数据分配到各个矩形区域中。在Python和pandas中,可以通过groupby功能以及(能够利用层次化索引的)重塑运算制作透视表。DataFrame有一个pivot_table方法,此外还有一个顶级的pandas.pivot_table函数。除了能为groupby提供便利之外,pivot_table还可以添加分项小计(也叫margins)。
1、透视表的优点:
- 灵活性高,可以随意定制你的分析计算要求
- 脉络清晰,易于理解数据
- 操作性强,报表神器
2、透视表的使用:
使用index
'''
pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
常用参数说明:
data: DataFrame
values:待进行聚合运算的列名。默认聚合所有类型是数值的列。
index:用于分组的列名或其他分组键(Grouper),出现在结果透视表的行(分组后作为行索引的列名)
columns:用于分组的列名或其他分组键(Grouper),出现在结果透视表的列(分组后作为列索引的列名)
aggfunc:指定对values参数所给的列做什么计算操作,默认为‘mean’。可以使任何对groupby有效的函数
margins:是否进行行汇总和列汇总
fill_value:对缺失值进行填充
dropna:删除缺失值
'''
# 必须指定index分组键
pt = pd.pivot_table(book_data,index = 'original_publication_year')
pt.head()
index指定的分组列的数据出现在数据的每一行上,这些数据为行索引。此时为指定values,默认对所有数值型数据进行运算,默认运算为mean,计算均值
使用columns 和 values
columns :指定进行列分组的列
values:指定要被计算的列
pt = pd.pivot_table(book_data,values = ['ratings_count','average_rating'],index = ['original_publication_year','authors'],columns = 'language_code')
pt.tail()
columns指定的列数据出现在透视表的列上,为列索引
使用aggfunc和 margins
aggfunc:指定要进行的聚合运算
margins:是否进行行列汇总
pt = pd.pivot_table(book_data,values = 'books_count',index = ['original_publication_year','authors'],columns = 'language_code',aggfunc = np.sum,margins = True,margins_name = '总和',fill_value= 0)
pt.tail()
3、使用groupby功能以及重塑运算制作透视表(groupby与unstack)
unstack对应的是excel中的透视功能,stack正好相反是逆透视
u1 = book_data[['original_publication_year','authors','language_code','books_count']].groupby(['original_publication_year','authors','language_code']).sum()
u1.tail()
groupby数据没有交叉透视,需要借助unstack
另外相比于pivot_table,groupby没有汇总统计功能(即margins)
二、交叉表
交叉表是一种用于计算分组频率的特殊透视表。
(探索两个变量之间的关系)
读取数据:
hand_data = pd.read_excel('用手习惯调查.xlsx')
hand_data
下面我们来探索一下性别和习惯之间的关系:
使用交叉表crosstab
pd.crosstab(hand_data['性别'],hand_data['惯用手'],margins= True)
使用透视表pivot_table
pd.pivot_table(hand_data,index = '性别',columns = '惯用手',aggfunc = len,margins= True )
总结
1、透视表pivot_table()是一种进行分组统计的函数,统计类型由参数aggfunc决定;
2、交叉表crosstab()是一种特殊的pivot_table(),专用于计算分组频率。