Pandas按年份提取最高Score对应Gross并计算均值的实现问题
问题解决方法
关于transform的作用说明
- 普通的
groupby('Year')['Score'].max()是按年份分组后,每个分组仅返回1个最高得分,输出结果长度等于年份数量,你拿到的4个值就对应1920/1930/1940/1960四个年份的最高分 groupby('Year')['Score'].transform('max')会把每个分组计算得到的最高分,回填到该分组的所有行上,输出长度和你的原始数据集行数完全一致,你拿到的13个值,每一行就代表当前行所属年份的最高得分,比如前3行都是1920年的,所以值都是1920年的最高分5.5
完整实现代码
import pandas as pd # 读取数据 df = pd.read_csv('test.csv') # 筛选出得分等于当年最高分的记录,按年份分组计算Gross的平均值 # 不需要保留中间字段可直接写为一行 result = df[df['Score'] == df.groupby('Year')['Score'].transform('max')].groupby('Year')['Gross'].mean() print(result)
输出结果说明
运行后得到的结果如下,和需求完全匹配:
Year 1920 160.000000 1930 250.000000 1940 616.666667 1960 300.000000 Name: Gross, dtype: float64
- 1920年两条最高分记录的Gross为150、170,平均值160
- 1930年两条最高分记录的Gross为300、200,平均值250
- 1940年三条最高分记录的Gross为500、650、700,平均值约616.67
- 1960年两条最高分记录的Gross为290、310,平均值300
内容的提问来源于stack exchange,提问作者Huy Pham
相关产品推荐
相关产品推荐

