Pandas|groupby()
groupby是Pandas用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。
- agg 聚合操作
聚合操作是groupby
后非常常见的操作,聚合操作可以用来求和、均值、最大值、最小值等.
函数 | 用途 | 函数 | 用途 |
---|---|---|---|
min |
最小值 | max |
最大值 |
sum |
求和 | mean |
平均值 |
median |
中位数 | std |
标准差 |
var |
方差 | count |
计数 |
示例:
班级 | 学生 | 语文 | 数学 | 英语 |
---|---|---|---|---|
一班 | 学生1 | 90 | 99 | 96 |
二班 | 学生2 | 98 | 90 | 92 |
三班 | 学生3 | 91 | 97 | 95 |
一班 | 学生4 | 92 | 91 | 93 |
二班 | 学生5 | 95 | 98 | 98 |
三班 | 学生6 | 89 | 96 | 99 |
一班 | 学生7 | 88 | 99 | 100 |
1、单列聚合
计算每个班的语文平均成绩:
df.groupby('班级')['语文'].mean()
班级
一班 90.0
三班 90.0
二班 96.5
Name: 语文, dtype: float64
2、多列聚合
在一个操作中进行多个聚合。以下是计算每个班语文和数学的平均成绩。
df.groupby('班级')['语文','数学'].mean()
语文 数学
班级
一班 90.0 96.333333
三班 90.0 96.500000
二班 96.5 94.000000
3、多列多个聚合
利用agg函数来计算多个聚合值。
df.groupby('班级')['语文'].agg(["mean", "max"])
mean max
班级
一班 90.0 92
三班 90.0 91
二班 96.5 98
4、对聚合结果进行命名
df.groupby('班级').agg(语文平均成绩=("语文","mean"),语文最高分=("语文","max"))
语文平均成绩 语文最高分
班级
一班 90.0 92
三班 90.0 91
二班 96.5 98
5、多个聚合和多个函数
df.groupby('班级')[['数学','语文']].agg(['sum','max'])
数学 语文
sum max sum max
班级
一班 289 99 270 92
三班 193 97 180 91
二班 188 98 193 98
6、对不同列的聚合进行命名
df.groupby('班级').agg(数学最高分=("数学","max"),语文平均成绩=("语文","mean"),英语最高分=("英语","max"))
数学最高分 语文平均成绩 英语最高分
班级
一班 99 90.0 100
三班 97 90.0 99
二班 98 96.5 98
7、as_index参数
如果groupby操作的输出是DataFrame,可以使用as_index参数使它们成为DataFrame中的一列。
df.groupby('班级',as_index=False).agg(数学最高分=("数学","max"),语文平均成绩=("语文","mean"),英语最高分=("英语","max"))
班级 数学最高分 语文平均成绩 英语最高分
0 一班 99 90.0 100
1 三班 97 90.0 99
2 二班 98 96.5 98