📜  pandas groupby 算作新列 - Python (1)

📅  最后修改于: 2023-12-03 14:45:02.612000             🧑  作者: Mango

Pandas Groupby 算作新列 - Python

在 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]})

该数据集有三列,分别是姓名、年龄和分数,其中姓名列有重复项。

Groupby 实现新列

假设我们想要根据姓名列对数据进行分组,并计算每个人的平均分数。我们可以使用如下的代码:

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 算作新列的过程,并成功地将平均分数添加为了一个新列。