Pandas透视表(pivot_table)详解

  • Post category:Python

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,也可以是 sumcountminmax 等;
  • 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,不妨参考官方文档和其他相关教程。