上QQ阅读APP看书,第一时间看更新
3.2.5 数据透视表和交叉表
数据透视表和交叉表是我们常用的数据统计方法,数据透视表可以快速聚合我们需要的数据,交叉表可以用于数据分组统计,两者在实际的数据分析任务中都是非常实用的。
1.数据透视表
相信大家对Excel中的数据透视表功能都比较熟悉,它根据一个或者多个列对数据进行聚合,并结合行、列分组将数据分配到各个矩形区域内。该功能可以帮助我们快速完成数据的统计工作。在Pandas中可以通过pivot_table方法实现数据透视表功能。pivot_table的参数如表3-8所示。
表3-8 pivot_table函数的参数
下面是一个pivot_table应用实例,具体如下:
In [95]: df.pivot_table(index='Sex') Out[95]: Date Num Sex F 20200107 46.166667 M 20200107 56.142857 未知 20200107 24.750000
pivot_table默认聚合函数是mean,显示结果为所有数值列的均值,我们也可以指定多个index以及其他聚合函数,如下所示:
In [98]: df.pivot_table(index=["System","Sex"],aggfunc=sum) Out[98]: Date Num System Sex android F 727203852 1759 M 444402354 1148 iOS F 363601926 734 M 404002140 1210 未知 80800428 99
同时也可以指定分组的列,代码如下:
In [99]: df.pivot_table(index =["Sex"],columns=['System'],aggfunc="mean") Out[99]: Date Num System android iOS android iOS Sex F 20200107.0 20200107.0 48.861111 40.777778 M 20200107.0 20200107.0 52.181818 60.500000 未知 NaN 20200107.0 NaN 24.750000
2.交叉表
交叉表主要用于统计分组频率,使用情况比较单一,是数据透视表的一种特殊情况。在Pandas中可以通过crosstab函数来实现,其参数及用法与pivot_table函数基本一致。
In [100]: pd.crosstab(index = df['Sex'],columns=df['Age']) Out[100]: Age 0~18岁 19~25岁 26~35岁 36~45岁 未知 Sex F 9 27 14 4 0 M 6 15 18 3 0 未知 0 0 0 0 4 In[101]:df.pivot_table(index=["Sex"],columns='Age',values='Num',aggfunc = "count") Out[101]: Age 0~18岁 19~25岁 26~35岁 36~45岁 未知 Sex F 9.0 27.0 14.0 4.0 NaN M 6.0 15.0 18.0 3.0 NaN 未知 NaN NaN NaN NaN 4.0