python - 找到最大分数的索引并使用该索引找到相应的总分并计算平均值?
问题描述
所以我有这个数据集如下:
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
我仍然对这个函数在做什么以及这个输出意味着什么感到困惑?
解决方案
问题不是很清楚,但是,让我们尝试使用最高分数的索引,然后使用 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
推荐阅读
- python - 如何从“for”中只获得一个输出
- php - 如何在 PHP 中创建一个填充有新对象的表
- python - 如何使用 Split 函数和 If-Else 根据关键词将句子拆分为 2 个列表
- flutter - 在 Flutter 中使用 Wi-Fi Direct 创建 P2P 连接
- javascript - 什么是做javascript动画的更快方法
- typescript - 在打字稿中选择一种交叉类型
- tkinter - 如何获取 Canvas 对象的 ID,以便可以在 tkinter 中删除它?
- c++ - 来自 Stroustrup 示例的从属名称模板问题
- yaml - 如何在 Spring Cloud Contracts 的 Yaml 格式中指定可选的请求参数?
- css - 尝试将 css 文件导入 vue.js 时出现问题