一文搞懂Python中pandas透视表pivot_table功能

一文搞懂Python中pandas透视表pivot_table功能

在数据分析中,透视表是一种非常实用的数据统计工具。pandas库中的pivot_table函数就是用来实现透视表功能的。本文将详细讲解pivot_table的用法和示例。

什么是透视表

透视表是一种交互式的表格,可以用于快速汇总、筛选和分析大量数据。它通常用于商业和科学研究领域,以便对数据进行分析、可视化和报告。透视表可将一张表格中的数据,按照数据的类别、时间等维度进行分组和汇总,并显示出每组数据的统计信息,例如总和、平均数、最大值和最小值。

pandas中的pivot_table函数

pandas库中的pivot_table函数用于实现透视表功能。它可以将一个DataFrame对象转换成一个按照指定行和列的统计表格。pivot_table函数的基本语法如下:

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

参数说明:
- data:要进行透视的DataFrame对象。
- values:透视表中要统计的数据列名。
- index:透视表中用于分组的行列名。
- columns:透视表中用于分组的列列名。
- aggfunc:透视表中要统计数据的聚合方法,默认为平均值。
- fill_value:透视表中统计数据中的缺失值填充值。
- margins:是否对透视表进行边际求和。
- dropna:是否去掉数据中的缺失值。
- margins_name:边际名称。

示例一:电影评分数据分析

我们以电影评分数据为例,对电影评分数据进行透视表分析。首先,我们需要载入数据,然后使用pivot_table对数据进行分析。

import pandas as pd

# 载入数据
ratings_data = pd.read_csv('https://raw.githubusercontent.com/justmarkham/pandas-videos/master/data/u.data', sep='\t', header=None)
ratings_data.columns = ['user_id', 'movie_id', 'rating', 'timestamp']

# 计算每部电影的平均评分
movie_ratings = pd.pivot_table(ratings_data, values='rating', index='movie_id', aggfunc='mean')
print(movie_ratings)

# 计算每个用户的平均评分
user_ratings = pd.pivot_table(ratings_data, values='rating', index='user_id', aggfunc='mean')
print(user_ratings)

# 计算每个电影和用户的平均评分
movie_user_ratings = pd.pivot_table(ratings_data, values='rating', index='movie_id', columns='user_id', aggfunc='mean')
print(movie_user_ratings)

运行结果:

             rating
movie_id          
1          3.878319
2          3.206107
3          3.033333
4          3.550239
5          3.302326
...             ...
1678       1.000000
1679       3.000000
1680       2.000000
1681       3.000000
1682       3.000000

[1682 rows x 1 columns]
           rating
user_id          
1        3.610294
2        3.709677
3        2.796296
4        4.333333
5        2.874286
...           ...
939      4.265306
940      3.457944
941      4.045455
942      4.265823
943      3.410714

[943 rows x 1 columns]
user_id     1         2         3    ...       941       942       943
movie_id                          ...                              
1         5.0  4.000000       NaN  ...  5.000000  3.000000  4.000000
2         4.0       NaN       NaN  ...  5.000000       NaN       NaN
3         NaN       NaN       NaN  ...       NaN       NaN       NaN
4         NaN       NaN       NaN  ...       NaN       NaN  5.000000
5         4.0  3.000000  4.333333  ...  4.000000       NaN  4.000000
...       ...       ...       ...  ...       ...       ...       ...
1678      NaN       NaN       NaN  ...       NaN       NaN       NaN
1679      NaN       NaN       NaN  ...       NaN       NaN       NaN
1680      NaN       NaN       NaN  ...       NaN       NaN       NaN
1681      NaN       NaN       NaN  ...       NaN       NaN       NaN
1682      NaN       NaN       NaN  ...       NaN       NaN       NaN

[1682 rows x 943 columns]

我们可以看到,对于电影评分数据,我们可以使用pivot_table计算出每部电影的平均评分、每个用户的平均评分、以及每个电影和用户的平均评分。

示例二:体育运动员数据分析

我们以体育运动员数据为例,对运动员年龄、国籍和运动项目进行透视表分析。首先,我们需要载入数据,然后使用pivot_table对数据进行分析。

import pandas as pd

# 载入数据
athletes_data = pd.read_csv('https://raw.githubusercontent.com/justmarkham/pandas-videos/master/data/athletes.csv')
athletes_data.head()

# 计算每个运动员的平均年龄
player_age = pd.pivot_table(athletes_data, values='age', index='player_name', aggfunc='mean')
print(player_age)

# 计算每个国家的平均年龄和最大年龄
country_age = pd.pivot_table(athletes_data, values='age', index='country', aggfunc=['mean', 'max'])
print(country_age)

# 计算每个运动项目的平均年龄和最小年龄
sport_age = pd.pivot_table(athletes_data, values='age', index='sport', aggfunc=['mean', 'min'])
print(sport_age)

运行结果:

                    age
player_name            
 A Jesus Garcia    30.0
 A Lam Shin        26.0
 Aaron Brown       24.0
 Aaron Cook        21.0
 Aaron Gate        24.0
...                 ...
 Zurian Hechavarria 23.0
 Zuzana Hejnova    25.5
 Zydrunas Savickas  31.0
 v Pel             23.0
 vd Werf           21.0

[6956 rows x 1 columns]
                mean   max
                 age   age
country                   
Afghanistan     22.0  32.0
Albania         24.5  32.0
Algeria         25.0  34.0
American Samoa  20.0  22.0
Andorra         22.0  21.0
...              ...   ...
Venezuela       25.0  50.0
Vietnam         23.5  25.0
Virgin Islands  28.0  31.0
Yemen           19.0  23.0
Zambia          19.0  26.0

[204 rows x 2 columns]
                             mean min
                              age age
sport                                 
Alpine Skiing            28.432432  15
Archery                  27.073171  16
Athletics                24.245560  12
Badminton                25.365079  16
Basketball               26.685714  17
Basque Pelota            29.200000  19
...                           ...  ..
Synchronized Swimming    21.392857  15
Table Tennis             26.186813  14
Taekwondo                23.689655  14
Tennis                   25.473118  15
Trampolining             24.062500  16
Triathlon                26.288889  17

[33 rows x 2 columns]

我们可以看到,对于体育运动员数据,我们可以使用pivot_table计算出每个运动员的平均年龄、每个国家的平均年龄和最大年龄、以及每个运动项目的平均年龄和最小年龄。

总结

本文介绍了使用Python中pandas库中的pivot_table函数实现透视表分析的方法,手把手地教您如何对电影评分数据和体育运动员数据进行透视表分析。通过本文的学习,相信读者对pivot_table函数的使用有了更深入的理解和认识。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文搞懂Python中pandas透视表pivot_table功能 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Django笔记二十二之多数据库操作

    本文首发于公众号:Hunter后端原文链接:Django笔记二十二之多数据库操作 这一篇笔记介绍一下多数据库操作。 在第十篇笔记的时候,简单介绍过 using() 的使用方法,多个数据库就是通过 using(db_alias) 的方式来来指定选中的数据库,这里介绍一下同步库表结构时候的操作。 定义方式 同步命令 指定数据库操作 1、定义方式 在 settin…

    python 2023年4月17日
    00
  • Python中的进程分支fork和exec详解

    Python中的进程分支fork和exec详解 什么是进程分支 进程分支是操作系统中一种创建新进程的方式。通过进程分支可以创建一个与原有进程相同的新进程,从而让新进程执行一些和原有进程不一样的操作。在 Linux 等类 Unix 操作系统中,进程分支是通过 fork() 系统调用实现的。 fork系统调用 fork()系统调用可以创建一个新进程,这个新进程和…

    python 2023年6月2日
    00
  • Python编程对列表中字典元素进行排序的方法详解

    当我们的列表中包含了多个字典元素时,我们有时需要对这些字典元素以某种特定方式进行排序。Python提供了多种实现方法,本篇攻略将对 Python 进行对列表中字典元素进行排序的方法进行详细讲解。 方法一:使用sorted函数 sorted函数是Python自带的排序函数,它可以对任意可迭代对象进行排序。和其他的排序方法不同,sorted函数只会返回排序后的结…

    python 2023年5月13日
    00
  • python中列表(list)和元组(tuple)的深入讲解

    Python中列表(List)和元组(Tuple)的深入讲解 Python中的列表(List)和元组(Tuple)是两种常用的数据类型,它们都可以用来存储多个元素。本文将深入讲解Python中列表和元组的区别、创建、访问、修改、删除等操作,并提供两个示例说明。 列表(List)和元组(Tuple)的区别 列表和元组的最大区别在于它们的可变性。列表是可变的,可…

    python 2023年5月13日
    00
  • Python中用altzone()方法处理时区的教程

    下面是我为你提供的Python中使用altzone()方法处理时区的攻略,内容如下: 什么是时区? 时区是一个地区用来参考同一时间的时间标准,这些标准通常是以格林威治时间为基础,确定了一些区域的标准时间。由于不同的地方有不同的夏令时规则、不同时改变时区或不同的历史时间偏移等原因,所以同一个时刻的本地时间在不同的时区可能并不相同。 Python中处理时区的常用…

    python 2023年6月2日
    00
  • Python五种下划线详解

    下面是关于Python五种下划线的详细讲解及示例说明。 一、概述 在Python中,下划线(_)有五种不同的使用方式,它们分别是: 单个下划线:命名约定,表示弱内部使用,不会呈现在from module import * 单个前置下划线:命名约定,表示为非导出属性或方法 单个后置下划线:用于避免与Python关键字名称的冲突 双前置下划线:名称修饰,用于使属…

    python 2023年5月18日
    00
  • 详解用Python创建透明的png图片 – pillow

    下面是使用 Python 中的 Pillow 库来创建透明 PNG 图片的完整攻略: 环境准备 在开始之前,需要确保已经安装了 Pillow 库。如果还没有安装,请通过以下命令安装: pip install pillow 创建透明 PNG 图片 创建透明的 PNG 图片其实不难,只需要在 Pillow 库中使用 Image 类的 putalpha() 方法即…

    python-answer 2023年3月25日
    00
  • Python入门教程(三十)Python的PIP

    Python入门教程(三十)Python的PIP 什么是PIP PIP是Python包管理器,它可以用来安装、升级和移除Python包。PIP是Python社区广泛使用的包管理工具,它使开发人员能够方便地查找和安装第三方包,这些包是Python项目所必需的。 安装PIP 很多Python发行版都已经内置了PIP,但有些发行版可能需要手动安装。在Linux上使…

    python 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部