首页 > 解决方案 > 找到最大分数的索引并使用该索引找到相应的总分并计算平均值?

问题描述

所以我有这个数据集如下:

Year,Score, Gross
1920,4,200
1920,5.5,150
1920,5.5,170
1930,5,300
1930,5,200
1930,4,140
1940,4,500
1940,4,650
1940,3,800
1940,4,700
1960,7,290
1960,5,250
1960,7,310

我试图找到数据集中存在的每一年的最高分数,然后获得该分数的相应总分,然后计算所有这些总分的平均值。例如,在 1960 年,有两个 7 分但总分不同,所以我需要找到这两个 7 分的索引并获得它们对应的总分以用于我的计算。

到目前为止,我一直在尝试对年份进行分组并找到最高分数,但在一年内只收到了一个最大值的输出。我的代码如下:

df = pd.read_csv('test.csv')
idx = df.groupby('Year')['Score'].apply(max)

对应的输出是:

0    5.5
1    5.0
2    4.0
3    7.0

请帮助,我真的被卡住了,不知道从哪里开始!编辑:社区成员建议我尝试使用转换,但现在我得到了如下输出:

0     5.5
1     5.5
2     5.5
3     5.0
4     5.0
5     5.0
6     4.0
7     4.0
8     4.0
9     4.0
10    7.0
11    7.0
12    7.0

我仍然对这个函数在做什么以及这个输出意味着什么感到困惑?

标签: pythonpandasdataframe

解决方案


问题不是很清楚,但是,让我们尝试使用最高分数的索引,然后使用 bloc 访问器进行过滤。如果澄清,很乐意提供帮助

df2.iloc[df2.groupby('Year', as_index=False)['Score'].idxmax()['Score']]

    Year  Score  Gross
1   1920    5.5    150
3   1930    5.0    300
6   1940    4.0    500
10  1960    7.0    290

根据您的评论,让我们尝试过滤两次。

#首先过滤每年的最高分数。

s=df2[df2['Score'].isin(df2.groupby('Year')['Score'].max().to_list())]

#最后,消除组中不重复的值

s[s.duplicated(subset=['Year','Score'],keep=False)]



   Year  Score  Gross
1   1920    5.5    150
2   1920    5.5    170
3   1930    5.0    300
4   1930    5.0    200
6   1940    4.0    500
7   1940    4.0    650
9   1940    4.0    700
10  1960    7.0    290
12  1960    7.0    310

推荐阅读