Pandas 分组和平均值
在本文中,我们将介绍如何使用Pandas中的groupby函数对数据进行分组,并使用这些组计算平均值。
阅读更多:Pandas 教程
分组数据
在Pandas中,groupby函数能够对DataFrame中的数据按照某个或多个列进行分组。例如,假设我们有以下的DataFrame:
import pandas as pd
data = {
'Name': ['Tom', 'Tom', 'Mary', 'Mary', 'John', 'John', 'John'],
'Subject': ['Math', 'Science', 'Math', 'Science', 'Math', 'Science', 'History'],
'Score': [80, 90, 85, 95, 90, 85, 75]
}
df = pd.DataFrame(data)
print(df)
输出结果如下:
Name Subject Score
0 Tom Math 80
1 Tom Science 90
2 Mary Math 85
3 Mary Science 95
4 John Math 90
5 John Science 85
6 John History 75
我们可以使用groupby函数,按照Name列对数据进行分组:
grouped = df.groupby('Name')
现在,我们有了一个GroupBy对象,它包含了按照Name列分组后的数据。我们可以遍历这个对象,查看每一组的数据:
for name, group in grouped:
print(name)
print(group)
输出结果如下:
John
Name Subject Score
4 John Math 90
5 John Science 85
6 John History 75
Mary
Name Subject Score
2 Mary Math 85
3 Mary Science 95
Tom
Name Subject Score
0 Tom Math 80
1 Tom Science 90
我们也可以通过指定多个列,对数据进行多维分组:
grouped = df.groupby(['Name', 'Subject'])
现在,我们有了一个按照Name和Subject列分组后的GroupBy对象。我们可以遍历这个对象,查看每一组的数据:
for name, group in grouped:
print(name)
print(group)
输出结果如下:
('John', 'History')
Name Subject Score
6 John History 75
('John', 'Math')
Name Subject Score
4 John Math 90
('John', 'Science')
Name Subject Score
5 John Science 85
('Mary', 'Math')
Name Subject Score
2 Mary Math 85
('Mary', 'Science')
Name Subject Score
3 Mary Science 95
('Tom', 'Math')
Name Subject Score
0 Tom Math 80
('Tom', 'Science')
Name Subject Score
1 Tom Science 90
计算平均值
在分组数据后,我们可以使用agg函数计算每一组数据的平均值。例如,我们可以计算每个学生的平均分数:
grouped = df.groupby('Name').agg({'Score': 'mean'})
print(grouped)
输出结果如下:
Score
Name
John 83
Mary 90
Tom 85
我们也可以对多维分组后的数据进行平均值计算:
grouped = df.groupby(['Name', 'Subject']).agg({'Score': 'mean'})
print(grouped)
输出结果如下:
Score
Name Subject
John History 75
Math 90
Science 85
Mary Math 85
Science 95
Tom Math 80
Science 90
总结
在Pandas中,groupby函数能够对DataFrame中的数据进行分组。我们可以按照一个或多个列分组,并可以对分组后的数据进行平均值计算。这些功能可以帮助我们更方便地对数据进行分析和统计计算,提高数据处理的效率和精度。