11 数据分析之数据分组与聚合
在数据分析中,数据分组与聚合是常用的操作,能够帮助我们从大量数据中提取出有用的信息。在上一篇中,我们讨论了描述性统计,了解了如何通过均值、方差等统计量概述数据的特征。而在本篇中,我们将学习如何对数据进行分组和聚合,以便进行更深入的分析。最后,我们将在后续的章节中使用这些分析结果进行数据可视化。
数据分组的概念
数据分组是将数据集按照某些特征进行划分的过程。Pandas库中的groupby()函数可以帮助我们轻松实现这一点。使用groupby()后,我们可以对每个组进行聚合、转换或过滤操作。
示例案例
我们将使用一个简单的假设数据集,包含学生的考试成绩。数据集如下:
| 学生 | 科目 | 分数 |
|---|---|---|
| A | 数学 | 85 |
| A | 英语 | 78 |
| B | 数学 | 92 |
| B | 英语 | 88 |
| C | 数学 | 70 |
| C | 英语 | 60 |
首先,我们通过Pandas将数据集导入:
import pandas as pd
data = {
'学生': ['A', 'A', 'B', 'B', 'C', 'C'],
'科目': ['数学', '英语', '数学', '英语', '数学', '英语'],
'分数': [85, 78, 92, 88, 70, 60]
}
df = pd.DataFrame(data)
print(df)
数据分组与聚合
通过groupby()函数,我们可以按学生列对数据进行分组,并计算每个学生的平均分数:
grouped = df.groupby('学生')['分数'].mean().reset_index()
print(grouped)
结果解释
输出的grouped数据框显示了每个学生的平均分数:
| 学生 | 分数 |
|---|---|
| A | 81.5 |
| B | 90.0 |
| C | 65.0 |
在上面的示例中,我们使用mean()函数进行平均值聚合,但Pandas提供了多种聚合函数,包括 sum()、count()、min()、max() 等等。
多重聚合
我们还可以对同一列使用多个聚合函数。例如,我们希望知道每位学生的分数总和和平均值,可以使用agg()方法:
agg_results = df.groupby('学生')['分数'].agg(['sum', 'mean']).reset_index()
print(agg_results)
这将返回一张数据框,其中包含每个学生的分数总和和平均分:
| 学生 | sum | mean |
|---|---|---|
| A | 163 | 81.5 |
| B | 180 | 90.0 |
| C | 130 | 65.0 |
使用pivot_table()进行数据透视
除了groupby()之外,Pandas还提供了pivot_table()函数,能够方便地处理数据透视问题。假设我们想要查看每个科目每个学生的平均分数:
pivot_table = df.pivot_table(values='分数', index='学生', columns='科目', aggfunc='mean').reset_index()
print(pivot_table)
结果解释
输出结果为:
| 学生 | 数学 | 英语 |
|---|---|---|
| A | 85 | 78 |
| B | 92 | 88 |
| C | 70 | 60 |
在这里,我们利用pivot_table()创建了一张新的数据框,显示了每位学生在不同科目的分数。
小结
本篇文章中,我们学习了数据分组和聚合的基本操作。通过使用groupby()函数和pivot_table()函数,我们能够对数据进行灵活的分组与汇总,提取出有意义的信息。这些分析结果将为我们在下一篇文章中使用数据可视化工具进行更深入的分析打下基础。
在下一篇,我们将讨论如何利用Matplotlib和Seaborn等库对分析结果进行可视化,使数据分析的结果更加直观和易于理解。
