Pandas透视表(pivot_table
)详解
在 Pandas 中,pivot_table
是一种常用的数据透视表生成方法。通过数据透视表,可以更方便地对数据进行分类、统计和汇总。本文将详细介绍 pivot_table
的用法和示例。
一、pivot_table
函数的基本语法
pivot_table
函数的基本语法如下:
pandas.pivot_table(
data, # 数据源
values=None, # 需要聚合的数据列名称
index=None, # 分类/行标签的列名称
columns=None, # 分组/列标签的列名称
aggfunc="mean", # 聚合函数,默认是 mean,也可以是 sum、count、min、max 等
fill_value=None, # 填充缺失值
margins=False, # 是否显示总计/合计信息
margins_name="All", # 总计/合计信息的显示名称
dropna=True, # 是否剔除缺失值
observed=False, # 是否只使用观测数据,不使用经过分组之后的过渡数据
)
下面我们对参数进行一一解释:
data
:数据源,必须是 Pandas 的 DataFrame 类型;values
:需要聚合的数据列名称;index
:分类/行标签的列名称;columns
:分组/列标签的列名称;aggfunc
:聚合函数,默认是mean
,也可以是sum
、count
、min
、max
等;fill_value
:填充缺失值;margins
:是否显示总计/合计信息,默认是False
;margins_name
:总计/合计信息的显示名称;dropna
:是否剔除缺失值,默认是True
;observed
:是否只使用观测数据,不使用经过分组之后的过渡数据,默认是False
。
二、示例说明
下面通过两个示例来说明 pivot_table
的用法。
示例一:根据性别统计学生成绩
假设我们有如下的学生数据集:
import pandas as pd
data = pd.DataFrame({
"姓名": ["小明", "小红", "小刚", "小王", "小李", "小张", "小赵", "小钱", "小孙", "小杨"],
"性别": ["男", "女", "男", "男", "女", "男", "女", "男", "女", "男"],
"语文": [86, 92, 78, 91, 89, 88, 95, 85, 81, 96],
"数学": [98, 91, 79, 76, 92, 98, 81, 90, 92, 88],
"英语": [88, 89, 82, 94, 87, 84, 91, 88, 95, 90]
})
现在我们想要根据性别统计学生成绩,可以使用 pivot_table
函数来实现,代码如下所示:
pd.pivot_table(data,
index=["性别"],
values=["语文", "数学", "英语"],
aggfunc=["mean", "min", "max"])
运行后的结果如下:
mean max min
数学 英语 语文 数学 英语 语文 数学 英语 语文
性别
女 91.5 89.666667 86.333333 92 95 92 91 84 82
男 87.8 89.200000 88.500000 98 96 96 76 85 78
以上结果说明,女生的平均数学成绩是 91.5,最高数学成绩是 92,最低数学成绩是 92;男生的平均数学成绩是 87.8,最高数学成绩是 98,最低数学成绩是 76。
示例二:根据地区统计销售额
假设我们有如下的销售数据集:
import pandas as pd
data = pd.DataFrame({
"日期": ["2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05", "2021-01-06"] * 3,
"地区": ["北京", "上海", "深圳"] * 6,
"销售额": [1000, 2000, 3000, 4000, 5000, 6000, 5000, 4000, 3000, 6000, 5000, 4000, 3000, 2000, 1000, 3000, 4000, 5000]
})
现在我们想要根据地区统计销售额,可以使用 pivot_table
函数来实现,代码如下所示:
pd.pivot_table(data,
index=["地区"],
values=["销售额"],
aggfunc=["sum"],
margins=True,
margins_name="总计")
运行后的结果如下:
sum
销售额
地区
上海 16000
北京 14000
深圳 14000
总计 44000
以上结果说明,北京地区的销售额是 14000,上海地区的销售额是 16000,深圳地区的销售额也是 14000,而总销售额则是 44000。
三、总结
本文对 pivot_table
函数进行了详细讲解,并通过两个示例说明了它的用法。pivot_table
函数可以更方便地对数据进行统计和汇总,在实际应用中也是比较常用的一种函数。如果读者想要深入学习 Pandas,不妨参考官方文档和其他相关教程。