如何创建一个函数来查找高于中位数的平均值?

时间:2016-04-22 23:54:00

标签: python

我想找到高于和低于中位数的所有分数的平均值(不包括中位数),但我不知道该怎么做。

import collections

def main():
    names = ["gymnastics_school", "participant_name", "all_around_points_earned"]
    Data = collections.namedtuple("Data", names)
    data = []
    values =[]

    with open('state_meet.txt','r') as f:   
        for line in f:
            line = line.strip()
            items = line.split(',')
            items[2] = float(items[2])
            data.append(Data(*items))        
            values.append(items[2])
    print("summary of data:")



    sorted_data = sorted (values)
    if len(data)%2==0:
        a =sorted_data[len(values)//2]

        b = sorted_data[len(values)//2-1]
        median_val = (a+b)//2
    else:
        median_val = sorted_data[(len(values)-1)//2]

    print("   median score",median_val)   #median

3 个答案:

答案 0 :(得分:1)

我们现在有statistics作为标准库的一部分:

import statistics

nums = list(range(10))
med = statistics.median(nums)

hi_avg = statistics.mean(i for i in nums if i > med)
lo_avg = statistics.mean(i for i in nums if i < med)

答案 1 :(得分:0)

您可以使用内置函数filtersum。例如

above_med = filter(lambda x: x>median_val,  values)
print(" average of scores above median ", sum(above_med)/len(above_med))

编辑:

正如@ChrisP所建议的那样,您也可以使用自python 3.4以来引入的标准包statistics

答案 2 :(得分:0)

以下是一个例子:

import numpy as np

data_array = np.array(data)

med = np.median(data)

ave_above_med = data_array[data_array > med].mean()

所以功能如下:

import numpy as np

def average_above_med(data):
    data_array = np.array(data)
    med = np.median(data)
    response = data_array[data_array > med].mean()

    return response

这是对此的考验:

test_data = [1, 5, 66, 7, 5]
print(average_above_med(test_data))

显示:

36.5

希望这有帮助。