gpt4 book ai didi

python Pandas : keep row with highest column value

转载 作者:行者123 更新时间:2023-11-28 22:18:41 25 4
gpt4 key购买 nike

假设我有一个学生考试成绩的数据框,其中每个学生学习不同的科目。每个学生可以多次参加每个科目的考试,只保留最高分(满分 100 分)。例如,假设我有一个包含所有测试记录的数据框:

| student_name | subject | test_number | score | 
|--------------|---------|-------------|-------|
| sarah | maths | test1 | 78 |
| sarah | maths | test2 | 71 |
| sarah | maths | test3 | 83 |
| sarah | physics | test1 | 91 |
| sarah | physics | test2 | 97 |
| sarah | history | test1 | 83 |
| sarah | history | test2 | 87 |
| joan | maths | test1 | 83 |
| joan | maths | test2 | 88 |

(1) 如何只保留分数最高的测试记录(行)?也就是说,

| student_name | subject | test_number | score | 
|--------------|---------|-------------|-------|
| sarah | maths | test1 | 78 |
| sarah | maths | test2 | 71 |
| sarah | maths | test3 | 83 |
| sarah | physics | test1 | 91 |

(2) 我如何保持同一科目、同一学生的所有测试的平均值?即:

| student_name | subject | test_number | ave_score | 
|--------------|---------|-------------|-----------|
| sarah | maths | na | 77.333 |
| sarah | maths | na | 94 |
| sarah | maths | na | 85 |
| sarah | physics | na | 85.5 |

我尝试了 df.sort_values()df.drop_duplicates(subset=..., keep=...) 的各种组合,但都无济于事.

实际数据

| query | target   | pct-similarity | p-val | aln_length | bit-score |
|-------|----------|----------------|-------|------------|-----------|
| EV239 | B/Fw6/623 | 99.23 | 0.966 | 832 | 356 |
| EV239 | B/Fw6/623 | 97.34 | 0.982 | 1022 | 739 |
| EV239 | MMS-alpha | 92.23 | 0.997 | 838 | 384 |
| EV239 | MMS-alpha | 93.49 | 0.993 | 1402 | 829 |
| EV380 | B/Fw6/623 | 94.32 | 0.951 | 324 | 423 |
| EV380 | B/Fw6/623 | 95.27 | 0.932 | 1245 | 938 |
| EV380 | MMS-alpha | 99.23 | 0.927 | 723 | 522 |
| EV380 | MMS-alpha | 99.15 | 0.903 | 948 | 1092 |

应用聚合函数后,只有列 pct-similarity 会感兴趣。

(1) 通过选择最大aln_length 删除重复的查询+目标行。保留属于具有最大aln_length 的行的pct-similarity 值。

(2) 通过选择具有最大aln_length 的行来聚合重复查询+目标行,并计算该组重复行的平均pct-similarity。其他数字列不是必需的,最终会被删除,所以我真的不在乎对它们应用了什么聚合函数(最大值或平均值)。

最佳答案

只需使用 max()给每组学生/科目:

df.groupby(["student_name","subject"], as_index=False).max()


student_name subject test_number score
0 joan maths test2 88
1 sarah history test2 87
2 sarah maths test3 83
3 sarah physics test2 97

对于平均值,这使用 mean()相反:

df.groupby(["student_name","subject"], as_index=False).mean()

student_name subject score
0 joan maths 85.500000
1 sarah history 85.000000
2 sarah maths 77.333333
3 sarah physics 94.000000

关于 python Pandas : keep row with highest column value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50283775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com