Python 从列表中查找最大平均值
我有一份清单:Python 从列表中查找最大平均值,python,Python,我有一份清单: input= [ ["Pakistan", 23], ["Pakistan", 127], ["India", 3], ["India", 71], ["Australia", 31], ["India", 22], ["Pakistan", 81] ] 现在我只想筛选出平均值最高的键值。在这种情况下,输出应为“巴基斯坦”: 有人能帮忙吗你可以使用熊猫: import pandas as pd l = [ ["Pakistan",
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
现在我只想筛选出平均值最高的键值。在这种情况下,输出应为“巴基斯坦”:
有人能帮忙吗你可以使用熊猫:
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'
另一个版本(仅限stdlib):
这里是实现的另一个变体
from 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')
首先,我尝试将键和值分开,以便获得平均值。请发布您为解决此问题而编写的代码,我们将帮助您找到解决方案。解决方案已经给出。检查Bellow我将尝试使用numpy数组并在numpy中设置axis kwarg。maxsame我尝试过的。。但解决方案已经存在here@Scott恕我直言,为什么不等到OP先发布一些示例代码呢?我们的责任不是首先尝试理解OP的方法,然后尝试引导他/她找到解决方案吗?在Python2中,整数除法可能是一个问题:
sum(t[c])/len(t[c])
,而在Python3中,您可以使用statistics.mean
。问题是询问平均值最高的键值,不是数字最高的键值。@GaneshTata感谢您指出,我已经更新了解决方案。
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')