简介
Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量快速便捷地处理数据的函数和方法。使Python成为强大而高效的数据分析环境的重要因素之一。
本实训的主要内容是:1.Pandas使用分组聚合进行组内计算,2.创建透视表和交叉表。本实训需要学员对Pandas的数据结构和统计函数有一定的了解。
第1关:Pandas分组聚合
任务描述
相关知识
分组
单列和多列分组
Series系列分组
通过数据类型或者字典分组
获取单个分组
对分组进行迭代
聚合
应用单个聚合函数
应用多个聚合函数
自定义函数传入agg()中
对不同的列使用不同的聚合函数
编程要求
测试说明
任务描述
本关任务:使用Pandas加载drinks.csv文件中的数据,根据数据信息求每个大洲红酒消耗量的最大值与最小值的差以及啤酒消耗量的和。
相关知识
分组聚合的流程主要有三步:
分割步骤将DataFrame按照指定的键分割成若干组;
应用步骤对每个组应用函数,通常是累计、转换或过滤函数;
组合步骤将每一组的结果合并成一个输出数组。
分组
通常我们将数据分成多个集合的操作称之为分组,Pandas中使用groupby()函数来实现分组操作。
单列和多列分组
对分组后的子集进行数值运算时,不是数值的列会自动过滤
import pandas as pd
data = {‘A’: [1, 2, 2, 3, 2, 4],
‘B’: [2014, 2015, 2014, 2014, 2015, 2017],
‘C’: [“a”, “b”, “c”, “d”, “e”, “f”],
‘D’: [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]
}
df = pd.DataFrame(data)
df.groupby(“B”) #单列分组 返回的是一个groupby对象
df.groupby([“B”,“C”]) #多列分组
Series系列分组
选取数据帧中的一列作为index进行分组:
df[“A”].groupby(df[“B”]) #df的 A 列根据 B 进行分组
通过数据类型或者字典分组
数据类型分组:
df.groupby(df.dtypes,axis=1) # axis=1表示按列分组,以数据类型为列名
传入字典分组:
dic = {“A”: “number”, “B”: “number”, “C”: “str”, “D”: “number”}
df.groupby(dic, axis=1) #按列分组,列名是字典的值
获取单个分组
使用get_group()方法可以选择一个组。
df.groupby(“A”).get_group(2)
输出:
A B C D
1 2 2015 b 0.9
2 2 2014 c 2.1
4 2 2015 e 0.5
对分组进行迭代
GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)。
for name,data in df.groupby(“A”):
print(name)
print(data)
输出:
1
A B C D
0 1 2014 a 0.5
2
A B C D
1 2 2015 b 0.9
2 2 2014 c 2.1
4 2 2015 e 0.5
3
A B C D
3 3 2014 d 1.5
4
A B C D
5 4 2017 f 0.1
聚合
聚合函数为每个组返回单个聚合值。当创建了groupby对象,就可以对分组数据执行多个聚合操作。比较常用的是通过聚合函数或等效的agg方法聚合。常用的聚合函数如下表:
函数名 说明
count 分组中非空值的数量
sum 非空值的和
mean 非空值的平均值
median 非空值的中位数
std、var 无偏标准差和方差
min、max 非空值的最小和最大值
prod 非空值的积
first、last 第一个和最后一个非空值
应用单个聚合函数
对分组后的子集进行数值运算时,不是数值的列会自动过滤
import pandas as pd
import numpy as np
data = {‘A’: [1, 2, 2, 3, 2, 4],
‘B’: [2014, 2015, 2014, 2014, 2015, 2017],
‘C’: [“a”, “b”, “c”, “d”, “e”, “f”],
‘D’: [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]
}
df = pd.DataFrame(data)
df.groupby(“B”).sum() #对分组进行求和
应用多个聚合函数
df.groupby(“B”).agg([np.sum,np.mean,np.std])
自定义函数传入agg()中
def result(df):
return df.max() - df.min()
df.groupby(“B”).ag