我想找到高于和低于中位数的所有分数的平均值(不包括中位数),但我不知道该怎么做。
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
答案 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)
您可以使用内置函数filter
和sum
。例如
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
希望这有帮助。