下面是关于 Pandas GroupBy 的用法完整攻略和实例说明。
简介
Pandas 是一个基于 NumPy 的库,用于数据操作和数据分析。其中,GroupBy 是一种数据聚合/分组操作,用于将数据集按照某些条件分组,并对各组进行操作。GroupBy 分组操作涉及到三个步骤:分组、应用、合并。具体来说,就是:
- 将数据集按照某些条件分组;
- 对各组应用一个函数(如聚合、转换、过滤);
- 将各组的结果合并成一个数据集。
分组方式
Pandas GroupBy 分组方式有以下几种:
- 按照某一列分组:groupby(column_name);
- 按照多列分组:groupby([column_name_1, column_name_2, ...]);
- 按照自定义函数分组:groupby(func)。
应用函数
Pandas GroupBy 应用函数有以下几种:
- 聚合函数:sum、mean、count、max、min、std、var;
- 转换函数:apply;
- 过滤函数:filter。
实例说明
下面我们结合一个实例来说明 GroupBy 的用法。假设我们有一个学生数据表格,其中包含学生姓名、性别、年龄和成绩信息。我们要按照性别分组,统计每个性别的平均成绩。
首先,我们需要导入 Pandas 库,并读取数据:
import pandas as pd
# 读取数据文件
df = pd.read_csv('student.csv')
接下来,我们使用 GroupBy 对数据进行分组,并应用聚合函数 mean 进行计算:
# 按照性别分组,并计算平均成绩
grouped = df.groupby('sex')['score'].mean()
print(grouped)
以上代码会输出每个性别对应的平均成绩,如下所示:
sex
F 85.2
M 78.5
Name: score, dtype: float64
其中,sex 列即为分组列,score 列为我们要进行聚合统计的列。mean 函数是聚合函数,用于计算平均值。
我们还可以对多个列进行分组,并同时计算多个聚合函数的值。例如,我们要按照性别和年龄分组,同时统计每个分组中的最高分数和最低分数:
# 按照性别和年龄分组,计算最高分和最低分
grouped = df.groupby(['sex', 'age'])['score'].agg(['max', 'min'])
print(grouped)
以上代码输出的结果如下:
max min
sex age
F 18 98 82
19 85 65
20 99 74
21 90 90
M 18 89 72
19 80 45
20 98 81
21 76 76
其中,agg 函数用于应用多个聚合函数。max 和 min 分别是最大值和最小值函数,用于计算每个分组的最高分数和最低分数。
除了聚合函数之外,我们还可以应用转换函数和过滤函数。例如,我们要过滤掉成绩低于 60 分的学生,然后按照性别分组,计算每个分组中学生的年龄和成绩的标准差:
# 过滤掉成绩低于 60 分的学生,按照性别分组,计算年龄和成绩的标准差
def filter_func(x):
return x['score'].mean() > 60
def transform_func(x):
x['score'] = (x['score'] - x['score'].mean()) / x['score'].std()
return x
filtered = df.groupby('sex').filter(filter_func)
grouped = filtered.groupby('sex').apply(transform_func).groupby('sex')[['age', 'score']].std()
print(grouped)
以上代码输出的结果如下:
age score
sex
F 0.707107 0.577350
M 1.290994 0.707107
其中,filter 函数用于过滤数据,过滤掉成绩低于 60 分的学生。apply 函数用于应用转换函数,计算每个学生成绩的 z-score(即每个学生的成绩与所有学生成绩的平均值的偏差值),并返回新的数据集。最后,我们再对分组后的数据集应用 std 函数计算每个分组中学生的年龄和成绩的标准差。
以上就是关于 Pandas GroupBy 用法的完整攻略和实例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas GroupBy 用法 - Python技术站