Pandas 如何使用groupby函数来计算分组后的平均值
阅读更多:Pandas 教程
Pandas简介
Pandas是一个强大的数据分析工具,提供了高性能、易于使用的数据结构和数据分析工具,广泛用于数据处理和数据分析。其中一个常用的功能是使用groupby函数对数据进行分组操作。
数据准备
在开始使用groupby计算平均值之前,我们先准备一份示例数据,以便演示使用。假设我们有一个员工信息表,包含员工姓名、所在部门和薪水。
import pandas as pd
# 创建示例数据
data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八'],
'部门': ['技术部', '技术部', '人力资源部', '人力资源部', '市场部', '市场部'],
'薪水': [8000, 9000, 7000, 8000, 10000, 11000]}
df = pd.DataFrame(data)
print(df)
运行以上代码,可以得到如下员工信息表:
姓名 | 部门 | 薪水 |
---|---|---|
张三 | 技术部 | 8000 |
李四 | 技术部 | 9000 |
王五 | 人力资源部 | 7000 |
赵六 | 人力资源部 | 8000 |
钱七 | 市场部 | 10000 |
孙八 | 市场部 | 11000 |
我们将使用groupby函数按照部门进行分组,并计算每个部门的平均薪水。
使用groupby计算平均值
要使用groupby计算平均值,我们需要两个步骤:首先是按照指定的列进行分组,然后对分组后的数据进行聚合计算。
# 按照部门进行分组
grouped = df.groupby('部门')
# 计算平均薪水
average_salary = grouped['薪水'].mean()
print(average_salary)
在上面的代码中,我们首先使用groupby函数按照部门进行分组,然后通过指定列名“薪水”来计算平均值。运行以上代码,可以得到如下结果:
部门 | 均值 | |
---|---|---|
技术部 | 8500.0 | |
人力资源部 | 7500.0 | |
市场部 | 10500.0 |
我们可以看到,通过groupby函数,我们成功地按照部门分组,并计算了每个部门的平均薪水。
按多个列进行分组
除了可以按照单个列进行分组外,我们还可以按照多个列进行分组。这样可以更加细致地划分数据。
# 按照部门和姓名进行分组
grouped = df.groupby(['部门', '姓名'])
# 计算平均薪水
average_salary = grouped['薪水'].mean()
print(average_salary)
在上面的代码中,我们通过传入一个包含多个列名称的列表[‘部门’, ‘姓名’]来按照部门和姓名进行分组。运行以上代码,可以得到如下结果:
部门 | 姓名 | 均值 |
---|---|---|
人力资源部 | 赵六 | 8000.0 |
王五 | 7000.0 | |
技术部 | | 部门 | 姓名 | 均值 | |
— | ———- | —- | ——- |
张三 | 技术部 | 8000.0 | |
李四 | 技术部 | 9000.0 | |
市场部 | 钱七 | 市场部 | 10000.0 |
孙八 | 市场部 | 11000.0 |
我们可以看到,通过传入多个列名称的列表进行分组后,我们成功地计算了每个部门中各个员工的平均薪水。
重命名计算结果的列名
在上面的例子中,我们计算的结果列名默认为被计算的列名。如果我们希望自定义计算结果的列名,可以使用rename函数进行重命名。
# 按照部门进行分组
grouped = df.groupby('部门')
# 计算平均薪水并重命名列名为"平均薪水"
average_salary = grouped['薪水'].mean().rename('平均薪水')
print(average_salary)
在上面的代码中,我们使用rename函数将计算结果的列名从默认的”薪水”修改为”平均薪水”。运行以上代码,可以得到如下结果:
部门 | 平均薪水 | |
---|---|---|
技术部 | 8500.0 | |
人力资源部 | 7500.0 | |
市场部 | 10500.0 |
使用agg函数进行多列操作
除了计算平均值外,我们还可以在groupby后使用agg函数进行多列操作,包括计算多个统计量等。
# 按照部门进行分组
grouped = df.groupby('部门')
# 计算平均薪水和最高薪水
statistics = grouped['薪水'].agg(['mean', 'max'])
print(statistics)
在上面的代码中,我们使用agg函数同时计算平均薪水和最高薪水。运行以上代码,可以得到如下结果:
部门 | mean | max | |
---|---|---|---|
技术部 | 8500.0 | 9000 | |
人力资源部 | 7500.0 | 8000 | |
市场部 | 10500.0 | 11000 |
我们可以看到,通过使用agg函数,我们成功地计算了每个部门的平均薪水和最高薪水。
过滤分组后的数据
除了计算聚合值外,我们还可以根据特定条件过滤分组后的数据。
# 按照部门进行分组
grouped = df.groupby('部门')
# 过滤出薪水高于8000的数据
filtered_data = grouped.filter(lambda x: x['薪水'].mean() > 8000)
print(filtered_data)
在上面的代码中,我们使用filter函数过滤出薪水高于8000的数据。运行以上代码,可以得到如下结果:
姓名 | 部门 | 薪水 |
---|---|---|
张三 | 技术部 | 8000 |
李四 | 技术部 | 9000 |
钱七 | 市场部 | 10000 |
孙八 | 市场部 | 11000 |
我们可以看到,通过使用filter函数,我们成功地过滤出了薪水高于8000的数据。
总结
通过本文,我们学习了如何使用Pandas中的groupby函数来计算分组后的平均值。我们学习了以下几个方面:
- 使用groupby函数按照指定列进行分组操作,可以根据不同的需求进行数据的划分。
- 通过在groupby函数中指定需要聚合计算的列,可以使用mean()函数计算平均值。
- 可以按照一个或多个列进行分组,细化数据的划分。
- 可以使用rename函数对计算结果的列名进行重命名,使结果更加清晰明了。
- 使用agg函数可以进行多列操作,计算多个统计量等。
- 可以使用filter函数对分组后的数据进行过滤,根据特定条件筛选所需数据。
以上是关于在Pandas中使用groupby函数计算分组后的平均值的介绍。希望本文对你学习和理解Pandas的groupby函数有所帮助。通过这些方法,你可以对数据进行灵活的分组和计算,为数据分析提供有力的支持。祝你在数据分析的道路上越走越远!