查找最大分数的索引并使用该索引查找相应的gross并计算mean?



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

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,但gross不同,所以我需要找到这两个分数为7的指数,并获得相应的gross用于我的计算。

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

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

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

这个问题不是很清楚,但是,让我们尝试使用最大分数的索引,然后使用该索引使用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

使用transform:

idx = df.groupby('Year')['Score'].transform('max')

最新更新