📅  最后修改于: 2023-12-03 14:45:02.612000             🧑  作者: Mango
在 Pandas 中,Groupby 方法可以方便地将数据按照给定的键(如列名)进行分组,并返回一个 Groupby 对象。在此基础上,我们可以对分组后的数据进行多种操作,例如计算平均值、求和等。在本文中,我们将介绍如何利用 Groupby 方法将计算结果添加为新列。
首先,我们需要准备一些数据。在本例中,我们将使用如下的数据集:
import pandas as pd
data = pd.DataFrame({'name': ['Tom', 'Jack', 'Tom', 'Jerry', 'Tom', 'Jerry'],
'age': [18, 20, 22, 25, 26, 27],
'score': [88, 90, 85, 82, 92, 94]})
该数据集有三列,分别是姓名、年龄和分数,其中姓名列有重复项。
假设我们想要根据姓名列对数据进行分组,并计算每个人的平均分数。我们可以使用如下的代码:
grouped = data.groupby('name')
avg_score = grouped['score'].mean()
以上代码中,首先通过 groupby
方法对数据集按照姓名列进行分组,并保存为一个 Groupby
对象。然后,我们使用 mean
方法计算每个分组中的分数列的平均值,最后得到了一个 Pandas 的 Series 对象。
接下来,我们使用 merge
方法将新得到的 Series 对象与原始数据集进行合并,实现新列的添加:
result = pd.merge(data, avg_score, on='name')
result.rename(columns={'score_y': 'avg_score'}, inplace=True)
以上代码中,merge
方法将原始数据集 data
与计算得到的平均分数列 avg_score
进行合并,合并键为姓名列。这样我们就得到了一个新的 DataFrame 对象,其中包含了新的一列 avg_score
。最后,我们使用 rename
方法将该列的列名更改为 avg_score
,以便更好地阅读。
import pandas as pd
# 模拟数据
data = pd.DataFrame({'name': ['Tom', 'Jack', 'Tom', 'Jerry', 'Tom', 'Jerry'],
'age': [18, 20, 22, 25, 26, 27],
'score': [88, 90, 85, 82, 92, 94]})
# 计算平均分数
grouped = data.groupby('name')
avg_score = grouped['score'].mean()
# 合并新列
result = pd.merge(data, avg_score, on='name')
result.rename(columns={'score_y': 'avg_score'}, inplace=True)
print(result)
输出结果如下:
name age score avg_score
0 Tom 18 88 88.333333
1 Tom 22 85 88.333333
2 Tom 26 92 88.333333
3 Jack 20 90 90.000000
4 Jerry 25 82 88.000000
5 Jerry 27 94 88.000000
以上代码完成了 Groupby 算作新列的过程,并成功地将平均分数添加为了一个新列。