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')