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的强大之处,它可以对数据进行灵活的汇总、聚合和分组操作,满足各种数据分析需求。在实际应用中,我们可以根据具体情况选用不同的分组方式和聚合操作,最终得到需要的结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas Groupby:在Python中对数据进行汇总、聚合和分组 - Python技术站