Как подсчитать повторяющиеся значения массива и вернуть их индексные местоположения?

У меня есть два массива, которые коррелировали данные. Массивы заполняются данными из таблицы Excel с использованием xlrd. Два массива:

foundLocations['D47', 'D33', 'D33', 'D35', 'PM001']
foundCounts[饈.0', 飁.0', པ.0', ུ.0', ྘.0']

Эти значения все время меняются, но, как вы видите, в этом примере дважды отображается D33.

Я хотел бы сложить значения foundCounts [1] и foundCounts [2] (в этом примере) вместе, чтобы получить итоговое значение для местоположения 'D33', а также других местоположений. Таким образом, «D47» будет иметь 240,0 штук. «D33» будет иметь 129,0 штук. «D35» будет иметь 56,0 штук. И «PM001» будет иметь 92,0 штук.

Ожидаемый результат:
Всего D33: 129,0
D35 всего: 56,0
Всего D47: 240,0
PM001 всего: 92,0

Я попытался преобразовать массивы в массив Numpy и сделать это:

import numpy as np
from numpy import array

a = array(foundLocations)
for r in foundLocations:
    searchval = r
    ii = np.where(a == searchval)[0]
    print(foundCounts[ii])

Но я получаю:

Ошибка типа: в скалярный индекс могут быть преобразованы только целочисленные скалярные массивы.

Всего 1 ответ


Похоже, что вы хотите словарь в качестве конечного результата, поэтому не ясно, что Numpy действительно правильный выбор.

Вот простой способ сделать это, чтобы получить словарь итогов. Это просто добавляет к каждому ключу, используя setdefault() чтобы гарантировать, что каждый ключ определен, а общее количество начинается с нуля:

foundLocations = ['D47', 'D33', 'D33', 'D35', 'PM001']
foundCounts = [饈.0', 飁.0', པ.0', ུ.0', ྘.0']

totals = {}
for loc, count in zip(foundLocations, foundCounts):
    totals[loc] = totals.setdefault(loc, 0) + float(count)

totals

Выход:

{'D47': 240.0, 'D33': 129.0, 'D35': 56.0, 'PM001': 92.0}

Есть идеи?

10000