pandas groupby函数
简介
在数据分析和数据处理过程中,经常需要对数据进行分组操作。Pandas是一个强大的数据分析工具,其提供的groupby函数能够方便地实现对数据的分组操作。本文将详细介绍Pandas的groupby函数的用法和示例。
一、基本用法
groupby
函数是Pandas中一个非常重要的函数,它的基本用法是将数据按照指定的列进行分组,并对分组后的数据进行聚合操作。下面是groupby
函数的基本语法:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
下面对参数进行一一解释:
by
:用于分组的依据列或列的列表。axis
:默认为0,表示按行进行分组;若为1,则表示按列进行分组。level
:用于多层索引的数据框的情况,表示用来分组的索引层级。as_index
:默认为True,表示分组后的索引是否是分组的依据列,若为False,则不使用分组的依据列作为索引。sort
:默认为True,表示按照分组列排序,若为False,则不进行排序。group_keys
:默认为True,表示是否在最后的结果中包含分组的键。squeeze
:默认为False,表示如果分组的结果中只有一列,则返回Series而不是DataFrame。observed
:默认为False,表示当出现任何一个观测值缺失时是否观测到。
二、分组操作
1. 分组依据为某一列
首先,我们来看一个示例。假设我们有一个学生的成绩单,包含学生的姓名、班级和成绩等信息,我们想要按照班级对学生进行分组,并计算每个班级的平均成绩。
import pandas as pd
# 创建DataFrame
data = {
'姓名': ['张三', '李四', '王五', '赵六', '刘七', '张八', '李九', '王十'],
'班级': ['一班', '一班', '二班', '三班', '二班', '一班', '三班', '二班'],
'成绩': [90, 80, 85, 95, 70, 88, 92, 76]
}
df = pd.DataFrame(data)
# 按班级进行分组,并计算平均成绩
grouped = df.groupby('班级')
result = grouped.mean()
print(result)
输出为:
成绩
班级
一班 86.0
三班 93.5
二班 77.7
上述代码中,首先创建了一个包含学生成绩的DataFrame。然后,使用groupby
函数按照班级进行分组,并使用mean
函数计算每个班级的平均成绩。
2. 分组依据为多个列
若要按照多个列进行分组,可以将多个列名作为by
参数的值传入。下面的示例演示了如何按照班级和性别两列进行分组,并计算每个班级和性别组合的平均成绩。
import pandas as pd
# 创建DataFrame
data = {
'姓名': ['张三', '李四', '王五', '赵六', '刘七', '张八', '李九', '王十'],
'班级': ['一班', '一班', '二班', '三班', '二班', '一班', '三班', '二班'],
'性别': ['男', '男', '女', '男', '女', '男', '女', '女'],
'成绩': [90, 80, 85, 95, 70, 88, 92, 76]
}
df = pd.DataFrame(data)
# 按班级和性别进行分组,并计算平均成绩
grouped = df.groupby(['班级', '性别'])
result = grouped.mean()
print(result)
输出为:
成绩
班级 性别
一班 男 89.0
女 88.0
三班 男 95.0
女 92.0
二班 女 80.5
男 76.0
上述代码中,首先创建了一个包含学生成绩的DataFrame。然后,使用groupby
函数按照班级和性别两列进行分组,并使用mean
函数计算每个班级和性别组合的平均成绩。
3. 分组后的聚合操作
在分组后,可以对分组后的数据进行各种聚合操作,如计算平均值、求和、计数等等。常用的聚合函数有mean
、sum
、count
、max
、min
等。下面是一个示例,演示了如何按照班级进行分组,并计算每个班级的总成绩、最高成绩和最低成绩。
import pandas as pd
# 创建DataFrame
data = {
'姓名': ['张三', '李四', '王五', '赵六', '刘七', '张八', '李九', '王十'],
'班级': ['一班', '一班', '二班', '三班', '二班', '一班', '三班', '二班'],
'成绩': [90, 80, 85, 95, 70, 88, 92, 76]
}
df = pd.DataFrame(data)
# 按班级进行分组,并计算总成绩、最高成绩和最低成绩
grouped = df.groupby('班级')
result = grouped.agg({'成绩': ['sum', 'max', 'min']})
print(result)
输出为:
成绩
sum max min
班级
一班 258 90 80
三班 187 95 92
二班 231 85 76
上述代码中,首先创建了一个包含学生成绩的DataFrame。然后,使用groupby
函数按照班级进行分组,并使用agg
函数对分组后的数据进行聚合操作,计算总成绩、最高成绩和最低成绩。