Pandas_07透视表和交叉表

17 篇文章 2 订阅

一、透视表

透视表(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(),专用于计算分组频率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值