欢迎访问宙启技术站
智能推送

使用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()函数可以方便地对数据进行分组、筛选和聚合操作。通过定义合适的分组和聚合函数,我们可以根据具体需求对数据进行灵活的计算和分析。