如何计算学生在 >25th 百分位 <75th 百分位之间的分数,按照分数的递增顺序。使用下面的函数

Posted

技术标签:

【中文标题】如何计算学生在 >25th 百分位 <75th 百分位之间的分数,按照分数的递增顺序。使用下面的函数【英文标题】:How to calculate student got marks between >25th percentile <75th percentile, in the increasing order of marks.use below function 【发布时间】:2020-09-11 19:29:31 【问题描述】:
Students=['student1','student2','student3','student4','student5','student6','student7','student8','student9','student10'] 
Marks = [45, 78, 12, 14, 48, 43, 47, 98, 35, 80]


def display_dash_board(students, marks):

    dictionary = dict(zip(Students,Marks))

    # write code for computing top top 5 students
    print("Top 5 Students are :\n\n")
    for key, value in sorted(dictionary.items(), key=lambda item: item[1],reverse=True)[:5]:
          print("%s: %s" % (key, value))

    # write code for computing top least 5 students
    print("\n\n Top Least 5 Students are : \n\n")
    for key, value in sorted(dictionary.items(), key=lambda item: item[1])[:5]:
          print("%s: %s" % (key, value))    

    # write code for students within 25 to 75 percentile
    print("\n\n Students in 25-75 percentile range are : \n\n")

用于计算百分位数:-

 max = max_mark

 min = min_mark

 diff = max - min

 pre_25 = diff*0.25

 pre_75 = diff*0.75

display_dash_board(学生,分数)

【问题讨论】:

对我来说看起来像是 pandas 的工作。但我假设分配不允许外部库。 :) @timgeb 它绝对不需要 Pandas。它需要一个列表解析来进行过滤。 @AKX 如果已经计算了百分位数。 @timgeb ... OP 的问题中有代码。 @AKX 是的,所以?我只是说我会用pandas 来解决整个问题。但我意识到这可能是家庭作业,所以我的方法不适用。 【参考方案1】:

鉴于执行百分位数计算的提示,

max_mark = max(marks)
min_mark = min(marks)
diff = max_mark - min_mark
pre_25 = diff * 0.25
pre_75 = diff * 0.75

然后您可以过滤您的字典以仅匹配这些限制的分数,

within_25_75 = 
   name: score 
   for (name, score) 
   in dictionary.items() 
   if pre_25 <= score <= pre_75

并像以前一样打印它们。

【讨论】:

我想用下面的程序找出百分位数 max = max_mark min = min_mark diff = max - min pre_25 = diff*0.25 pre_75 = diff*0.75 这与这里的过程相同,只是使用了正确的变量。【参考方案2】:

一个班轮。因为 1/4 是第 25 个百分位,而 3/4 是第 75 个百分位。

import math
[print(k[0], k[1]) for k in
 list(sorted(dictionary.items(), key=lambda item: item[1]))[math.ceil(len(Marks) / 4):math.floor(3 * len(Marks) / 4)]]

#Output
student6 43
student1 45
student7 47
student5 48

说明: 第 25-75 个百分位表示,打印排序列表长度的 1/4 到排序列表长度的 3/4 之间的值。

请注意,我们也使用floorceil。这是为了确保值严格在第 25 和第 75 个百分位数之间

【讨论】:

写过一次后,你能轻松阅读那行字吗? 没错。但是,如果您在其上方添加评论。它解释了代码中发生的事情。然后它为您带来好处,因为需要管理的代码行更少,复杂性更低。无论如何,对于那些喜欢编写短代码(更少的行)和代码高尔夫的人来说,这只是另一种口味.. 感谢您的建议,但我只想通过给定的百分位数程序找出答案,而不使用 pandas 和 numpy @pravinkamble 我没有使用过它们中的任何一个。代码使用纯python并导入内置数学库。

以上是关于如何计算学生在 >25th 百分位 <75th 百分位之间的分数,按照分数的递增顺序。使用下面的函数的主要内容,如果未能解决你的问题,请参考以下文章

百分位,百分位数(percentile)

计算包括小数

如何计算 SQL 中数据的 90th Percentile、SD、Mean

如何计算表中一个字段的总和并将其放入输入中

计算列中值的百分位数

如何在php中对组中的值求和?