请思考:
1 透视表是什么?会用Excel做透视表吗?
2 pandas如何做透视表分析?使用什么函数?函数的参数如何选择和设置?
1 透视表介绍
数据透视表是一个用来总结和展示数据的强大工具。pandas提供了pivot_table()函数以快捷地把DataFrame转换为透视表。
2 导入数据
代码
# 导入Python库
import numpy as np
import pandas as pd
# 读取Excel文件,并且查看前5行数据集
df = pd.read_excel('sales-funnel.xlsx')
df.head()
结果
变量集数据类型以及类型转换
代码
# 查看变量集数据类型
df.dtypes
# 变量Status类型转换和设置要检视的顺序
df['Status'] = df['Status'].astype('category')
df['Status'].cat.set_categories(["won","pending","presented","declined"],inplace=True)
结果
3 数据透视表分析
简单的透视表,指定DataFrame里面需要透视的一个index,以Name为index做透视表。
代码
# 指定一个DataFrame和它的一个的index做简单的透视表
pd.pivot_table(df, index=['Name'])
结果
请思考:透视表默认的计算逻辑和展示方式是什么?
在数据框中选择多个index做透视表。
代码
pd.pivot_table(df, index=['Name', 'Rep', 'Manager'])
结果
通过参数values指定我们所关心的列。
代码
pd.pivot_table(df, index=['Manager', 'Rep'], values=['Price'])
结果
计算逻辑默认是对数值型变量做平均,通过参数aggfunc设置所要聚合计算的逻辑,比方说求和,最小值,最大值等。
代码
pd.pivot_table(df, index=['Manager', 'Rep'], values=['Price'], aggfunc=np.sum)
结果
参数aggfunc可以接受一个聚合计算的列表,例如:求和与计数
代码
pd.pivot_table(df, index=['Manager', 'Rep'], values=['Price'], aggfunc=[np.sum, len])
结果
参数columns实现对透视表做进一步细分或者下钻。
代码
pd.pivot_table(df, index=['Manager', 'Rep'], values=['Price'], columns=['Product'], aggfunc=[np.sum])
结果
参数fill_value对透视表里面缺失值做处理
代码
pd.pivot_table(df, index=['Manager', 'Rep'], values=['Price'], columns=['Product'], aggfunc=[np.sum], fill_value=0)
结果
参数margins对透视表做总数描述
代码
pd.pivot_table(df, index=['Manager', 'Rep', 'Product'], values=['Price', 'Quantity'], aggfunc=[np.sum, np.mean], fill_value=0, margins=True)
结果
通过对参数aggfunc传递字典来实现对参数values里面指定的列执行所需的聚合计算操作。
代码
table = pd.pivot_table(df, index=['Manager', 'Status'], columns=['Product'], values=['Quantity', 'Price'], aggfunc={'Quantity':len, 'Price':[np.sum, np.mean]}, fill_value=0)
table
结果
4 使用query()函数对透视表做过滤操作
实例1
代码
table.query('Manager == ["Debra Henley"]')
结果
实例2
代码
table.query('Status == ["pending","won"]')
结果
5 总结
pandas通过pivot_table()函数可以实现透视表,通过设置函数里面的不同参数以达成不同的目标。常用的参数包括index, values, aggfunc, columns, fill_value, margins等。