一文搞懂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技术站