Python广告数据挖掘与分析实战
上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