📜  如何在 Pandas 中将组级汇总统计添加为新列?(1)

📅  最后修改于: 2023-12-03 15:24:18.495000             🧑  作者: Mango

如何在 Pandas 中将组级汇总统计添加为新列?

当我们需要对 Pandas DataFrame 进行组级汇总统计时,有时需要将这些统计结果添加为新列。在 Pandas 中,我们可以使用 groupbytransform 函数来实现这一目标。

下面我们首先创建一个包含学生成绩的 DataFrame:

import pandas as pd
import numpy as np

data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'] * 2,
        'subject': ['Math', 'Math', 'Math', 'English', 'English'] * 2,
        'score': np.random.randint(60, 100, 10)}

df = pd.DataFrame(data)

print(df)

输出:

      name  subject  score
0    Alice     Math     93
1      Bob     Math     78
2  Charlie     Math     72
3    David  English     75
4     Emma  English     96
5    Alice     Math     79
6      Bob     Math     60
7  Charlie     Math     63
8    David  English     98
9     Emma  English     76

我们要对该 DataFrame 按照学生姓名和学科进行分组,然后计算每个学生在该学科中的平均分,并将其添加为新列:

df['avg_score'] = df.groupby(['name', 'subject'])['score'].transform('mean')

print(df)

输出:

      name  subject  score  avg_score
0    Alice     Math     93  86.000000
1      Bob     Math     78  69.000000
2  Charlie     Math     72  67.500000
3    David  English     75  86.500000
4     Emma  English     96  86.000000
5    Alice     Math     79  86.000000
6      Bob     Math     60  69.000000
7  Charlie     Math     63  67.500000
8    David  English     98  86.500000
9     Emma  English     76  86.000000

可以看到,新的 avg_score 列展示了每个学生每个学科的平均分。

具体地,groupby 函数按照 ['name', 'subject'] 列对 DataFrame 进行分组,然后 transform 函数计算了每个分组的 score 列的平均值,并将其作为新的一列添加至 DataFrame 中。

这就是在 Pandas 中将组级汇总统计添加为新列的方法。