Получить значение с максимальным количеством от каждого ключа с несколькими значениями Python словарь - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть словарь, который выглядит следующим образом:

{
    'max_depth': [15, 20, 35, 20, 20],
    'min_samples_split': [1, 5, 5, 3, 2],
    'n_estimators': [50, 50, 50, 10, 10]
}

Я хотел бы вернуть следующее, где значения - это те, которые встречаются чаще всего:

{
    'max_depth': 20,
    'min_samples_split': 5,
    'n_estimators': 50
}

У меня есть попробовал следующее:

def most_freq_param(param_data_col):
    out = []

    #model params
    param_list = list(ast.literal_eval(param_data_col.iloc[1]).keys())

    params = {}
    max_params = {}     

    for i in range(len(param_list)): #create empty dict of params
        params[param_list[i]] = []
        max_params[param_list[i]] = []

    for i in range(len(param_data_col)):
        out.append(ast.literal_eval(param_data_col.iloc[i]))

    for value in out:
        for param in params:
            for i in range(len(param_list)):
                params[param].append(value[param_list[i]])

    for param in max_params:
        lst = params.get(param)
        max_value = max(lst,key=lst.count)
        max_params[param].append(max_value)

    return max_params

1 Ответ

0 голосов
/ 27 апреля 2020

Для данного словаря params = {'max_depth': [15,20,35,20,20], 'min_samples_split': [1,5,5,3,2], 'n_estimators': [50, 50,50,10,10]}

С помощью приведенного ниже кода вы можете получить требуемый результат: {'max_depth': 20, 'min_samples_split': 5, 'n_estimators': 50}

from statistics import mode
d = {'max_depth': [15,20,35,20,20], 'min_samples_split': [1,5,5,3,2], 'n_estimators': [50,50,50,10,10]}
max_params = {}
for key, value in d.items():
    max_params[key] = mode(d[key])

Вы также можете использовать модуль сбора:

from collections import Counter
d = {'max_depth': [15,20,35,20,20], 'min_samples_split': [1,5,5,3,2], 'n_estimators': [50,50,50,10,10]}
max_params = {}
for key, value in d.items():
    max_params[key] = Counter(d[key]).most_common(1)[0][0]

Подробнее о коллекциях читайте: https://docs.python.org/2/library/collections.html

Теперь вы можете использовать любой из вышеперечисленных блоков кода в вашей функции, чтобы получить наиболее частые параметры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...