下面是详细讲解Python的通用groupby归约使用方法的完整攻略。
简介
groupby是Python中常用的一种归约方法,主要作用是将数据集合按照指定的条件进行分组。在分组后,我们可以对每个组进行聚合操作,比如求和、平均值、最大值、最小值等等。groupby是Python中实现数据分析的重要工具,也是Python数据科学库pandas中的一部分。
使用方法
基本语法
groupby的基本语法为:df.groupby(by=[col1, col2]).agg({'col3': 'mean', 'col4': 'max'})
。
其中,by
参数指定分组的依据,可以是多个列,以一个列表形式传入;agg
参数指定了聚合的方式,以一个字典形式传入,字典的键为需要聚合的列,字典的值为聚合方式。
示例1:按照一列进行分组并求和
假设我们有一个学生成绩的数据集students,包含了学生姓名、科目、成绩三列数据。现在我们需要将学生按照姓名进行分组,并计算每个人的总成绩。
import pandas as pd
# 创建数据
data = {
'name': ['Tom', 'Jack', 'Tom', 'Mary', 'John', 'John'],
'subject': ['Math', 'English', 'Chinese', 'Math', 'Math', 'English'],
'score': [80, 70, 90, 85, 95, 60]
}
df = pd.DataFrame(data)
# 按照姓名分组并求和
df.groupby(by=['name']).agg({'score': 'sum'})
运行结果:
score
name
Jack 70
John 155
Mary 85
Tom 170
上述代码中,我们使用了groupby
方法将数据按照姓名分组,然后使用agg
方法对每个分组进行聚合计算,计算方式为对分组内的分数列求和。
示例2:按照多列进行分组并计算平均值
如果我们需要同时按照两个或多个指标进行分组,可以将多个指标放在列表中传入by
参数。
# 按照姓名和科目分组并计算平均值
df.groupby(by=['name', 'subject']).agg({'score': 'mean'})
运行结果:
score
name subject
Jack English 70
John English 60
Math 95
Mary Math 85
Tom Chinese 90
Math 80
上述代码中,我们通过将姓名和科目两个指标放在by
参数中,实现了按照两列进行分组的目的,并使用agg
方法计算每个分组的分数平均值。
总结
groupby是Python中非常有用的数据归约方法,它可以用来对数据集合进行分组和聚合操作,结合其他工具可以完成更加复杂的数据分析任务。需要注意的是,在使用groupby时,我们需要对数据做好预处理,并理解分组和聚合的相关概念,以便更好地进行数据分析。