pandas groupby多个字段
在数据分析中,经常需要根据多个字段对数据进行分组并进行聚合操作。pandas库提供了groupby
函数来实现这一功能。本文将详细介绍如何使用pandas中的groupby
函数对数据按照多个字段进行分组,并进行统计、计算等操作。
数据准备
首先,我们先准备一份包含姓名、性别、年龄和分数的数据集,供后续操作使用。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'],
'Gender': ['Female', 'Male', 'Female', 'Male', 'Female', 'Male', 'Female', 'Male'],
'Age': [25, 30, 25, 30, 25, 30, 25, 30],
'Score': [80, 90, 85, 88, 82, 91, 87, 89]}
df = pd.DataFrame(data)
df
运行以上代码,我们得到如下数据集:
Name Gender Age Score
0 Alice Female 25 80
1 Bob Male 30 90
2 Alice Female 25 85
3 Bob Male 30 88
4 Alice Female 25 82
5 Bob Male 30 91
6 Alice Female 25 87
7 Bob Male 30 89
单字段分组
首先,我们来看如何对数据集进行单字段分组。假设我们要按照姓名来计算每个人的平均分数,可以使用如下代码:
# 按照姓名分组,计算平均分数
grouped = df.groupby('Name')['Score'].mean()
grouped
运行以上代码,我们得到以下结果:
Name
Alice 83.50
Bob 89.50
Name: Score, dtype: float64
多字段分组
接下来,我们将介绍如何对数据集按照多个字段进行分组。假设我们要按照姓名和性别计算每组的平均年龄,可以使用如下代码:
# 按照姓名和性别分组,计算平均年龄
grouped = df.groupby(['Name', 'Gender'])['Age'].mean()
grouped
运行以上代码,我们得到以下结果:
Name Gender
Alice Female 25
Bob Male 30
Name: Age, dtype: int64
多字段分组并应用多个聚合函数
除了计算单个聚合函数外,我们还可以同时计算多个聚合函数。假设我们要按照姓名和性别计算每组的平均分数和最高分数,可以使用如下代码:
# 按照姓名和性别分组,计算平均分数和最高分数
grouped = df.groupby(['Name', 'Gender'])['Score'].agg(['mean', 'max'])
grouped
运行以上代码,我们得到以下结果:
mean max
Name Gender
Alice Female 83.50 87
Bob Male 89.50 91
多字段分组并应用自定义聚合函数
在实际应用中,我们可能需要自定义聚合函数来满足特定的需求。假设我们要按照姓名和性别计算每组的平均分数,并计算平均分数的平方和,可以使用如下代码:
# 自定义聚合函数
def custom_agg_func(x):
return (x**2).sum()
# 按照姓名和性别分组,计算平均分数并应用自定义聚合函数
grouped = df.groupby(['Name', 'Gender'])['Score'].agg(['mean', custom_agg_func])
grouped
运行以上代码,我们得到以下结果:
mean custom_agg_func
Name Gender
Alice Female 83.50 26274
Bob Male 89.50 32014
多字段分组并对结果重命名
有时候,我们在进行多字段分组后,希望对最终的结果进行重命名。假设我们要按照姓名和性别计算每组的平均年龄,并将结果重命名为avg_age
,可以使用如下代码:
# 按照姓名和性别分组,计算平均年龄并重命名
grouped = df.groupby(['Name', 'Gender'])['Age'].mean().reset_index()
grouped.rename(columns={'Age': 'avg_age'}, inplace=True)
grouped
运行以上代码,我们得到以下结果:
Name Gender avg_age
0 Alice Female 25
1 Bob Male 30
通过以上示例,我们学习了如何使用pandas库中的groupby
函数对数据按照多个字段进行分组,并进行各种操作。在实陃应用中,可以根据具体需求选择适合的聚合函数和操作,对数据进行更加全面的分析和处理。