我有一个列表:
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
现在我想过滤出只有最高平均值的键值。就像在这种情况下输出应该是“巴基斯坦”:
out = "Pakistan"
有人能帮忙吗?
我有一个列表:
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
out = "Pakistan"
有人能帮忙吗?
import pandas as pd
l = [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
pd.DataFrame(l).groupby([0]).mean().idxmax().values[0]
输出:
'Pakistan'
from __future__ import division
import collections
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
t = collections.defaultdict(list)
for c,n in input:
t[c].append(n)
max(t, key=lambda c: sum(t[c]) / len(t[c]))
'Pakistan'
sum(t[c]) / len(t[c])
,而在Python 3中,您可以使用statistics.mean
。 - Akavallfrom collections import defaultdict
import operator
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
cv_dict=defaultdict(list)
for key, score in input:
cv_dict[key].append(score)
for k,v in cv_dict.items():
cv_dict[k]=sum(v)/len(v)
max(cv_dict, key=cv_dict.get)
为什么不尝试使用内置的max
方法,而不导入任何重型外部模块或使其过于复杂?
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
track={}
for i in input:
if i[0] not in track:
track[i[0]]=[i[1]]
else:
track[i[0]].append(i[1])
print(max([(sum(j)/len(j),i) for i,j in track.items()]))
输出:
(77.0, 'Pakistan')