Как подсчитать повторяющиеся значения массива и вернуть их индексные местоположения? - PullRequest
0 голосов
/ 17 мая 2019

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

foundLocations['D47', 'D33', 'D33', 'D35', 'PM001']
foundCounts['240.0', '105.0', '24.0', '56.0', '92.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])

Но я получаю:

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

1 Ответ

0 голосов
/ 17 мая 2019

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

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

foundLocations = ['D47', 'D33', 'D33', 'D35', 'PM001']
foundCounts = ['240.0', '105.0', '24.0', '56.0', '92.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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...