Pandas按一列进行groupby操作,但保留其他列在结果数据框中的方法

您所在的位置:网站首页 按条件筛选其他列中的重复值 Pandas按一列进行groupby操作,但保留其他列在结果数据框中的方法

Pandas按一列进行groupby操作,但保留其他列在结果数据框中的方法

2024-07-05 21:52| 来源: 网络整理| 查看: 265

Pandas按一列进行groupby操作,但保留其他列在结果数据框中的方法

在本文中,我们将介绍如何在使用Pandas进行groupby操作时保留其他列在结果数据框中的方法,以及如何使用agg()函数来聚合列值。

阅读更多:Pandas 教程

数据准备

首先,让我们创建一个包含“名称”、“性别”、“科目”和“分数”的数据框。

import pandas as pd data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily', 'Frank', 'Grace', 'Henry', 'Isabella', 'Jack'], 'Gender': ['Female', 'Male', 'Male', 'Male', 'Female', 'Male', 'Female', 'Male', 'Female', 'Male'], 'Subject': ['Math', 'Math', 'English', 'English', 'Math', 'English', 'Math', 'Math', 'English', 'Math'], 'Score': [75, 82, 90, 85, 77, 92, 80, 87, 91, 88] } df = pd.DataFrame(data)

这个数据框看起来像这样:

Name Gender Subject Score 0 Alice Female Math 75 1 Bob Male Math 82 2 Charlie Male English 90 3 David Male English 85 4 Emily Female Math 77 5 Frank Male English 92 6 Grace Female Math 80 7 Henry Male Math 87 8 Isabella Female English 91 9 Jack Male Math 88

现在,我们可以使用groupby()函数按“科目”列将数据框分组,并计算每个组的平均分。

grouped = df.groupby(['Subject'])[['Score']].mean() print(grouped)

这将生成以下输出:

Score Subject English 89.333333 Math 82.800000

注意,我们指定了单个列来进行groupby操作,并且将其作为数据框返回。现在,我们需要将“名称”和“性别”列添加回结果数据框中。

保留其他列

我们可以使用transform()函数来将分组的结果添加回原始数据框。我们指定“Score”列进行groupby操作,并将结果赋给一个新列“Group_Mean”。 然后,我们将使用drop()函数删除“Score”列,从而只保留“名称”和“性别”。

df['Group_Mean'] = df.groupby(['Subject'])[['Score']].transform('mean') result = df.drop(['Score'], axis = 1) print(result)

这将生成以下输出:

Name Gender Subject Group_Mean 0 Alice Female Math 82.8 1 Bob Male Math 82.8 2 Charlie Male English 89.333333 3 David Male English 89.333333 4 Emily Female Math 82.8 5 Frank Male English 89.333333 6 Grace Female Math 82.8 7 Henry Male Math 82.8 8 Isabella Female English 89.333333 9 Jack Male Math 82.8

现在,我们保留了“名称”和“性别”列,并在结果数据框中添加了一个新列“Group_Mean”,该列包含每个组的平均分。

聚合列值

除了保留其他列外,我们还可以使用agg()函数来聚合非numeric类型的列值,例如字符串。假设我们还有一个“Country”列,我们想按“科目”和“国家”分组,并计算每个组的计数和所有“名称”的逗号分隔字符串。

我们可以使用agg()函数来实现这一点。我们将创建一个包含两个聚合函数的字典,一个是count()函数用于计数,“Name”列的逗号分隔字符串使用lambda函数来实现。

df['Country'] = ['US', 'UK', 'UK', 'US', 'US', 'UK', 'US', 'UK', 'UK', 'US'] grouped = df.groupby(['Subject', 'Country']).agg({'Name': lambda x: ', '.join(x), 'Score': 'count'}) print(grouped)

这将生成以下输出:

Name Score Subject Country English UK 2 US 1 Math UK 2 US 2

注意,我们指定了两个列用于groupby操作,并且使用agg()函数指定了聚合函数。现在,我们有一个包含计数和逗号分隔“名称”列的结果数据框。

总结

在本文中,我们介绍了如何使用Pandas进行groupby操作,并保留其他列在结果数据框中的方法。我们使用transform()函数来添加分组结果,使用agg()函数来聚合列值。这些函数可帮助我们快速进行复杂的数据分析,并轻松地处理结果数据框。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3