У меня есть два массива, которые коррелировали данные. Массивы заполняются данными из таблицы 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}