Как найти среднее значение списка с уникальными идентификаторами - PullRequest
0 голосов
/ 08 ноября 2019

Так что в основном у меня есть список целых чисел, из которых я хотел бы получить среднее значение. Дело в том, что у меня есть второй список строк равной длины. Это настроено в таблице ниже. Теперь, по сути, мне нужно добавить сумму целых чисел, соотносящихся с соответствующей буквой, и вернуть среднее значение этих букв. Это делается на Python 3, и я застрял в этом вопросе в течение последних нескольких дней. Может ли кто-нибудь указать мне правильное направление?

before

| 2   | a |
+-----+---+
| 241 | b |
+-----+---+
| 21  | a |
+-----+---+
| 512 | b |
+-----+---+
| 142 | a |
+-----+---+
after
+-----+---+
| 165 | a |
+-----+---+
| 753 | b |
+-----+---+

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Давайте предположим, что list1 = [2, 241, 21, 512, 142] и list2 = ['a', 'b', 'a', 'b', 'a'], как вы описали. Я не знаю, какие именно ограничения у вас есть, но позвольте мне использовать два словаря в дополнение к начальной настройке.

  1. Получить уникальные ключи в list2 и подсчитать количество ключей.

Давайте определим пустой словарь cnt_dic для подсчета количества ключей. После подсчета ключей создайте копию словаря res_dic с нулевым значением.

cnt_dic = {}

for key in list2:
    if key not in cnt_dic: 
        cnt_dic[key] = 1
    else:
        cnt_dic[key] += 1

res_dic = cnt_dic.copy()
for key in res_dic.keys():
    res_dic[key] = 0
Суммируйте целые числа, используя собранные ключи.
for num, key in zip(list1, list2):
    res_dic[key] += num
Рассчитать средние значения.
for key in cnt_dic.keys():
    res_dic[key] /= cnt_dic[key]

Тогда res_dic будет содержать {'a': 55.0, 'b': 376.5}.

0 голосов
/ 08 ноября 2019

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

import pandas as pd

list_1 = [2, 241, 21, 512, 142]
list_2 = ['a', 'b', 'a', 'b', 'a']

c = pd.DataFrame()
c['list_1'] = list_1
c['list_2'] = list_2

uniques = c.list_2.unique()
for i in uniques:
    print('sum ' + i + ': ' + str(c[c.list_2==i].list_1.sum()))
    print('mean ' + i + ': ' + str(c[c.list_2==i].list_1.mean()))
...