Python透视表pivot_table

在工作中经常要用到excel来画透视表,那么在python中应该怎么画透视表呢?下面简单分享一下。

导入需要的库:

import numpy as np #用于基础数值计算
import pandas as pd #处理面板数据常用
import seaborn as sns #画图用,也能通过它获取一下练手用的数据

读取数据:

titanic = sns.load_dataset('titanic') #泰坦尼克号生存数据
titanic.columns #看数据的各个列名
titanic.head() #看开头5行数据

通过上面的代码可以看到数据中包含性别、年龄、舱位等级、是否生存等字段。

分组统计:

考察性别和舱位等级对生存率的影响:先使用聚集函数:

titanic.groupby('sex')['survived'].mean() #先用groupby将
#数据按照sex列分组,再对每组的survived列求平均即得不同性别的生存率

如果我们想同时观察性别和舱位等级对生存率的影响,使用聚集函数的话代码就有点复杂了:

titanic.groupby(['sex', 'class'])['survived'].mean().unstack()
#同时观察性别和舱位等级对生存率的影响,结果是列联表

使用透视表:pivot_table

titanic.pivot_table('survived', index='sex', columns='class') #

上面代码中index=‘sex’,columns='class’表示用性别作行,舱位等级作列,对每个分组分别求’survived’列的均值得出生存率。如果我们不想求survived的均值而想使用其它聚集函数,可以在pivot_table中增加accfunc参数,例如accfun='sum’表示求每组的总和,即不同舱位等级和性别的乘客的生存人数。
再增加年龄维度:

#先将年龄属性分成0-18岁和18至80岁两组:
age = pd.cut(titanic['age'], [0, 18, 80]) #默认上组限在内
titanic.pivot_table('survived', ['sex', age], 'class')
#这样就得到了不同性别、年龄组、舱位等级的乘客的生存率

也可以为不同的列指定不同的聚集函数,例如我们既想求每个分组的总生存人数,又想求每个分组乘客的平均票价,可以通过以下代码实现:

#为不同的列指定不同的accfunc:
titanic.pivot_table(index='sex', columns='class',                           
                    aggfunc={'survived':sum, 'fare':'mean'})
#性别为行,舱位等级为列,对每个分组的生存人数求和,票价求平均 
#sum不用加引号是因为sum是python自带的函数,而mean是np中的函数,因此mean要加引号否则无法识别

margins=True给出每个分组的总计值:

titanic.pivot_table('survived', index='sex', columns='class', margins=True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值