数据透视表是一种分类汇总数据的方法。在 Python 中,我们可以使用 Pandas 库中的pivot_table 函数来创建和操作数据透视表,相比Excel,Python可以更多更快的处理数据。
一、数据
首先,引入几个重要的包:
import pandas as pd
import numpy as np
from pandas import DataFrame,Series
通过代码构造数据集,创建一个DataFrame对象,作为数据源:
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'Gender': ['Female', 'Male', 'Male', 'Male', 'Female'],
'Age': [25, 30, 35, 40, 45],
'City': ['Beijing', 'Shanghai', 'Beijing', 'Shanghai', 'Beijing'],
'Salary': [5000, 6000, 7000, 8000, 9000]}
df = pd.DataFrame(data)
得到数据如下:
Name Gender Age City Salary
0 Alice Female 25 Beijing 5000
1 Bob Male 30 Shanghai 6000
2 Charlie Male 35 Beijing 7000
3 David Male 40 Shanghai 8000
4 Emily Female 45 Beijing 9000
二、pivot_table
首先,介绍一下pivot_table 函数:
函数:
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:每个pivot_table必须拥有一个index,必选参数,设定数据的行索引,可以设置多层索引,多次索引时按照需求确定索引顺序。
columns:必选参数,设定列索引,用来显示字符型数据,和fill_value搭配使用。
aggfunc:聚合函数, pivot_table后新dataframe的值都会通过aggfunc进行运算。默认numpy.mean求平均。
fill_values:填充NA值(设定缺失值)。默认不填充,可以指定。
margins:添加行列的总计,默认FALSE不显示。TRUE显示。
dropna:如果整行都为NA值,则进行丢弃,默认TRUE丢弃。FALSE时,被保留。
margins_name:margins = True 时,设定margins 行/列的名称。‘all’ 默认值
三、按照不同类进行计数统计
为了结算每个城市不同性别的平均收入,我们可以利用pivot_table函数进行统计:
pt1 = df.pivot_table(index='City', columns='Gender', values='Salay', aggfunc='mean')
结果如下:
Gender Female Male
City
Beijing 7000.0 7000.0
Shanghai NaN 7000.0
如果要知道每个城市不同性别的总收入,只需要设定aggfunc函数为sum进行求和:
pt2 = df.pivot_table(index='City', columns='Gender', values='Salary', aggfunc='sum')
结果如下:
Gender Female Male
City
Beijing 14000.0 7000.0
Shanghai NaN 14000.0
可以看到这两个数据透视表是有缺失值的,pivot_table有一个参数fill_value,就是用来填充这些缺失值的。而pivot_table方法还支持对透视表进行统计计算,而且会新建一个列来存放计算结果。这个统计需要用到以下两个参数:
● margins,设定是否添加汇总列,一般设置为True。
● margins_name,汇总列的名称。
代码示例:
pt3 = df.pivot_table(index='City', columns='Gender', values='Salary', fill_value=0, aggfunc='sum', margins=True, margins_name="汇总")
结果如下:
Gender Female Male 汇总
City
Beijing 14000 7000 21000
Shanghai 0 14000 14000
汇总 14000 21000 35000
四、筛选数据透视表中的数据
pivot_table的运算结果是一个DataFrame类型,所以可以用DataFrame截取数据的方法筛选数据透视表中的数据。本节用于示例的数据透视表如下:
Gender Female Male 汇总
City
Beijing 14000 7000 21000
Shanghai 0 14000 14000
汇总 14000 21000 35000
(1)仅保留汇总列的数据。
pt['汇总']
结果是一个Series,如下所示。
City
Beijing 21000
Shanghai 14000
汇总 35000
Name: 汇总, dtype: int64
(2)获取男性和女性的汇总数据。
pt[['Female', 'Male']]
结果如下:
Gender Female Male
City
Beijing 14000 7000
Shanghai 0 14000
汇总 14000 21000
五、使用字段列表排列数据透视表中的数据
数据透视表是一个DataFrame,所以可以用sort_values方法来按某列排序,示例代码如下:
pt3 = df.pivot_table(index='City', columns='Gender', values='Salary', fill_value=0, aggfunc='sum', margins=True, margins_name="汇总")
pt3.sort_values(by="汇总")
结果如下:
Gender Female Male 汇总
City
Shanghai 0 14000 14000
Beijing 14000 7000 21000
汇总 14000 21000 35000
以上就是用Python构造数据透视表的内容介绍。数据透视表是数据分析中非常重要的工具,掌握它可以让你更加高效地进行数据处理和可视化呈现。