所以我有这个数据集如下:
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')