使用Aggregate()函数实现数据筛选与聚合
发布时间:2024-01-04 19:09:52
Aggregate()函数是一种用于数据筛选与聚合的函数,它可以对数据进行分组、筛选、以及定义聚合函数进行聚合操作。下面将会给出一个使用Aggregate()函数实现数据筛选与聚合的例子。
假设有一个包含学生信息的数据集,其中包含学生的姓名、性别、年龄、科目以及成绩。我们需要对这个数据集进行分组计算每个科目的平均成绩,并找出每个科目中平均成绩最高的男生和女生。
首先,我们需要加载数据集并将其转换为DataFrame格式:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Alice', 'Lisa'],
'Gender': ['M', 'M', 'F', 'F', 'F'],
'Age': [20, 21, 19, 22, 20],
'Subject': ['Math', 'English', 'Math', 'English', 'Math'],
'Score': [80, 85, 90, 95, 92]}
df = pd.DataFrame(data)
得到以下DataFrame:
Name Gender Age Subject Score 0 Tom M 20 Math 80 1 Nick M 21 English 85 2 John F 19 Math 90 3 Alice F 22 English 95 4 Lisa F 20 Math 92
接下来,我们可以使用Aggregate()函数对数据进行筛选与聚合。
首先,我们使用GroupBy()函数进行分组,根据科目和性别进行分组:
grouped = df.groupby(['Subject', 'Gender'])
然后,我们使用Aggregate()函数定义聚合操作,计算每个分组的平均成绩。同时,我们可以使用匿名函数Lambda表达式来计算平均值:
result = grouped['Score'].aggregate(lambda x: x.mean())
得到以下结果:
Subject Gender
English F 95
M 85
Math F 91
M 80
Name: Score, dtype: int64
接下来,我们可以使用reset_index()函数将结果转换为DataFrame格式,并按照科目进行排序:
result_df = result.reset_index().sort_values(by='Subject')
得到以下DataFrame:
Subject Gender Score 2 English F 95 3 English M 85 0 Math F 91 1 Math M 80
最后,我们可以使用GroupBy()函数的apply()方法,结合Lambda表达式进行筛选操作,找出每个科目中平均成绩最高的男生和女生:
top_students = result_df.groupby('Subject').apply(lambda x: x.nlargest(1, 'Score'))
得到以下结果:
Subject Gender Score
Subject
English 3 English M 85
Math 0 Math F 91
通过以上例子,我们可以看到使用Aggregate()函数可以方便地对数据进行分组、筛选和聚合操作。通过定义合适的分组和聚合函数,我们可以根据具体需求对数据进行灵活的计算和分析。
