需要创建一个从字典中提取中位数的函数
我需要找出与每个键(AA、BB)相关的所有整数的中位数。我的代码大致是这个格式:
AA - 21
AA - 52
BB - 3
BB - 2
我的代码:
def scoreData(filename):
d = dict()
fin = open(filename)
contents = fin.readlines()
for line in contents:
parts = linesplit()
part[i] = int(part[1])
if parts[0] not in d:
d[parts[0]] = list(parts[1])
else:
d[parts[0]].append(parts[1])
names = list(d.keys())
names.sort() #alphabeticez the names
print("Name\+Max\+Min\+Median")
for name in names: #makes the table
print (name"\+", max(d[name]),\+min(d[name]),"\+"median(d[name]))
我担心按照“names”和“names.sort”的格式会完全改变数据的结构。我考虑过使用“from statistics import median”,但我还是不知道怎么只选择与每个相同键相关的值。
提前谢谢你们!
2 个回答
0
有很多,很多 方法可以解决这个问题。不过这里有一个“简单粗暴”的实现方式,可以完成这个任务。
假设你的数据是这样的:
AA 1
BB 5
AA 2
CC 7
BB 1
你可以这样做:
import numpy as np
from collections import defaultdict
def find_averages(input_file)
result_dict = defaultdict(list)
for line in input_file.readlines()
key, value = line.split()
result_dict[key].append[int(value)]
return [(key, np.mean(value)) for key,value in result_dict.iteritems()]
1
你可以很简单地使用 pandas
和 numpy
来实现:
import pandas
import numpy as np
然后通过第一行进行汇总:
score = pandas.read_csv(filename, delimiter=' - ', header=None)
print score.groupby(0).agg([np.median, np.min, np.max])
这将返回:
1
median amin amax
0
AA 36.5 21 52
BB 2.5 2 3