关键词

Pandas Groupby:在Python中对数据进行汇总、聚合和分组

Pandas Groupby是一种在Python中对数据进行汇总、聚合和分组的技术。使用该技术可以根据某个或某些字段对数据进行分组,然后对组内的数据进行聚合操作。

按单个字段分组

Pandas中的groupby方法非常灵活,可以根据不同的参数进行分组。最常见的分组是按单个字段进行分组,示例如下:

import pandas as pd

# 假设有一个学生成绩表,包含学生姓名,科目和成绩
grades = pd.DataFrame({'name': ['Joe', 'Sally', 'Bob', 'Joe', 'Sally', 'Bob'],
                       'subject': ['Math', 'Math', 'Math', 'English', 'English', 'English'],
                       'score': [80, 70, 90, 85, 75, 95]})

# 按姓名进行分组,并求每个人的平均成绩
avg_scores = grades.groupby('name')['score'].mean()
print(avg_scores)

输出结果如下:

name
Bob      92.5
Joe      82.5
Sally    72.5
Name: score, dtype: float64

以上代码中,我们先定义了一个包含成绩信息的DataFrame,然后使用groupby('name')方法按照学生的姓名进行分组,并计算每个学生的平均成绩。最后输出的是每个学生的平均成绩。

按多个字段分组

除了按单个字段进行分组,Pandas还可以按多个字段进行分组。示例如下:

import pandas as pd

# 假设有一个学生成绩表,包含学生姓名,科目和成绩
grades = pd.DataFrame({'name': ['Joe', 'Sally', 'Bob', 'Joe', 'Sally', 'Bob'],
                       'subject': ['Math', 'Math', 'Math', 'English', 'English', 'English'],
                       'score': [80, 70, 90, 85, 75, 95]})

# 按姓名和科目进行分组,并求每个人在每个科目的平均成绩
avg_scores = grades.groupby(['name', 'subject'])['score'].mean()
print(avg_scores)

输出结果如下:

name    subject
Bob     Math       90
        English    95
Joe     English    85
        Math       80
Sally   English    75
        Math       70
Name: score, dtype: int64

以上代码中,我们使用groupby(['name', 'subject'])方法先按姓名进行分组,然后再在每个组内按照科目进行分组,最后求每个人在每个科目的平均成绩。

聚合操作

在分组后,我们可以对每个组进行聚合操作,例如求和、求平均、求最大值等等。示例如下:

import pandas as pd

# 假设有一个学生成绩表,包含学生姓名,科目和成绩
grades = pd.DataFrame({'name': ['Joe', 'Sally', 'Bob', 'Joe', 'Sally', 'Bob'],
                       'subject': ['Math', 'Math', 'Math', 'English', 'English', 'English'],
                       'score': [80, 70, 90, 85, 75, 95]})

# 按姓名进行分组,并求每个人的总成绩、平均成绩、最高分和最低分
agg_scores = grades.groupby('name')['score'].agg(['sum', 'mean', 'max', 'min'])
print(agg_scores)

输出结果如下:

       sum  mean  max  min
name                     
Bob    185    92   95   90
Joe    165    82   85   80
Sally  145    72   75   70

以上代码中,我们使用agg(['sum', 'mean', 'max', 'min'])方法对每个分组进行聚合,返回每个分组的总成绩、平均成绩、最高分和最低分。最后输出的是每个学生的总成绩、平均成绩、最高分和最低分。

筛选操作

在分组后,我们可以对每个组进行筛选操作,例如选择成绩最高的学生。示例如下:

import pandas as pd

# 假设有一个学生成绩表,包含学生姓名,科目和成绩
grades = pd.DataFrame({'name': ['Joe', 'Sally', 'Bob', 'Joe', 'Sally', 'Bob'],
                       'subject': ['Math', 'Math', 'Math', 'English', 'English', 'English'],
                       'score': [80, 70, 90, 85, 75, 95]})

# 按姓名进行分组,选择每个分组中成绩最高的学生
top_scores = grades.groupby('name').apply(lambda x: x.iloc[x['score'].argmax()])
print(top_scores)

输出结果如下:

        name  subject  score
name                       
Bob      Bob  English     95
Joe      Joe  English     85
Sally  Sally    Math     70

以上代码中,我们使用apply方法对每个分组进行筛选,选择每个分组中成绩最高的学生。最后输出的是每个学生中成绩最高的科目和成绩。

总结

通过以上示例,我们看到了Pandas Groupby的强大之处,它可以对数据进行灵活的汇总、聚合和分组操作,满足各种数据分析需求。在实际应用中,我们可以根据具体情况选用不同的分组方式和聚合操作,最终得到需要的结果。

本文链接:http://task.lmcjl.com/news/14431.html

展开阅读全文