4.9 透视表和重塑dataframe

本文介绍了Pandas中数据透视表(pivot_table)和交叉表(crosstab)的用法,包括如何进行数据重塑、统计分析及差异。通过实例展示了如何使用pivot_table进行复杂的数据分组和聚合操作,以及如何利用crosstab计算因子的频率。同时,文章还探讨了pivot、pivot_table与groupby的区别,帮助读者更好地理解和应用这些工具。
摘要由CSDN通过智能技术生成
import numpy as np
import pandas as pd

在数据分析中,常常需要用到数据透视表和交叉表,下面介绍pandas.DataFrame.pivot_table数据透视表和pandas.DataFrame.crosstab交叉表的用法和区别。

4.9.1 数据透视表

典型的数据格式是扁平的,只包含行和列,不方便总结信息。数据透视表(pivot table) 是一种类似GroupBy的操作方法,常见于Excel中。数据透视表将每一列数据作为输入,输出将数据不断细分为多个维度累计信息的二维数据表。

  • 数据透视表用来做数据透视,可以通过一个或多个键分组聚合DataFrame中的数据,通过aggfunc参数决定聚合类型,是groupby的高级功能。
  • 透视表就是将指定原有DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数(默认情况下式mean函数)。

使用pivot_table的好处:

  • 灵活性高,可以随意定制你的分析计算要求
  • 脉络清晰易于理解数据
  • 操作性强,报表神器

pivot_table调用方式:

pd.pivot_table(data, values = None,index = None,columns = None,aggfunc ='mean',fill_value = None,margin = False,dropna = True,margins_name ='All' )

pd.pivot_table参数如下:

  • data:DataFrame对象
  • values:是要进行汇总、统计等运算列,可以是多个(list格式)
  • index:数据透视表的index,从原数据的列中筛选,是作为新表的列名,可以是多个(list格式)
  • columns:数据透视表的columns,从原数据的列中筛选,是作为新表的列名,可以是多个(list格式)
  • aggfunc:用于聚合的函数,默认为numpy.mean,支持numpy计算方法,是做汇总的统计运算方法,常用的简单运算都可以,也可以是多种方法(每个不同的列指定一种方法),这样就可以免去了多次使用透视表在进行合并的麻烦。
  • fill_value: 用于替换缺失值的值
  • margin: 添加所有行/列
  • dropna: 不包括条目为 NaN的列,默认为True
  • margin_name: 当margin为True时,将包含总计的行/列的名称

注意,在所有参数中,values、index、columns最为关键,它们分别对应excel透视表中的值、行、列:

Index就是层次字段,要通过透视表获取什么信息就按照相应的顺序设置字段,所以在进行pivot之前你也需要足够了解你的数据。

In [2]:

#读取学生信息
st = pd.read_excel('data/stinfo.xlsx',index_col=0)

In [3]:

st.loc[0,'籍贯'] = '盐田'
st.head(3)

Out[3]:

姓名 学号 出生日期 年龄 籍贯 性别 身高 体重 linux python 网络 数据库 IT基础
0 甲一 50 2001年1月1日 19 盐田 172 69 92 90 82 NaN 80
1 乙二 51 1999年2月2日 21 龙岗 180 77 95 88 85 NaN 80
2 丙三 52 2002年3月3日 18 南山 160 49 85 91 93 NaN 80

以性别做数据透视,统计不同籍贯的学号数目:

In [4]:

pd.pivot_table(st, values = '学号', 
               index = '性别', columns = '籍贯',aggfunc=len)

Out[4]:

籍贯 南山 宝安 盐田 福田 龙岗
性别
1.0 2.0 NaN 1.0 1.0
1.0 1.0 1.0 NaN 3.0

以性别和籍贯共同做数据透视,统计不同(性别,籍贯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenos121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值