📅  最后修改于: 2023-12-03 15:24:18.495000             🧑  作者: Mango
当我们需要对 Pandas DataFrame 进行组级汇总统计时,有时需要将这些统计结果添加为新列。在 Pandas 中,我们可以使用 groupby
和 transform
函数来实现这一目标。
下面我们首先创建一个包含学生成绩的 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 中将组级汇总统计添加为新列的方法。