Python 通用的group-by归约

  • Post category:Python

下面是详细讲解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时,我们需要对数据做好预处理,并理解分组和聚合的相关概念,以便更好地进行数据分析。