Фильтровать структурированный массив numpy на основе нескольких значений
У меня есть многоуровневый структурированный массив. :
myArray = np.array([(1, 1, 1, u'Zone3', 9.223), (2, 1, 0, u'Zone2', 17.589), (3, 1, 1, u'Zone2', 26.95), (4, 0, 1, u'Zone1', 19.367), (5, 1, 1, u'Zone1', 4.395)], dtype=[('ID', '<i4'), ('Flag1', '<i4'), ('Flag2', '<i4'), ('ZoneName', '<U5'), ('Value', '<f8')])
Я хотел бы суммировать значения из столбца «Значение», когда выполняются несколько критериев. Если я хочу, чтобы Flag1 и Flag2 == ==, я могу использовать:
sumResult = (sum(myArray[((myArray["Flag1"] == 1) & (myArray["Flag2"] == 1))]["Value"]))
Тем не менее, я также хотел бы включить третий критерий, основанный на том, являются ли значения в списке, что эквивалентно использованию x in list
:
criteriaList = ("Zone1", "Zone2") sumResult = (sum(myArray[((myArray["Flag1"] == 1) & (myArray["Flag2"] == 1) & (myArray["ZoneName"] in criteriaList))]["Value"]))
Который должен равняться 31.345. Я новичок в numpy и изучил маскированные массивы, но неясно, как и как их можно использовать со структурированными массивами. Благодарю.
- найти отрезки Trues в массиве numpy
- индексирование объекта datetime в массиве numpy
- Как создать массив numpy из pydub AudioSegment?
- Почему memmap нужно имя файла, когда я пытаюсь изменить массив numpy?
- Как суммировать два массива в Python?
Вам нужно использовать np.in1d
для проверки членства в вашем criteriaList
np.in1d
:
In [1]: myArray["ZoneName"] in criteriaList --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-1-ff2173ff4348> in <module>() ----> 1 myArray["ZoneName"] in criteriaList ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() In [2]: np.in1d(myArray["ZoneName"], criteriaList) Out[2]: array([False, True, True, True, True], dtype=bool) In [3]: myArray[(myArray["Flag1"] == 1) & ....: (myArray["Flag2"] == 1) & ....: np.in1d(myArray["ZoneName"], criteriaList)]["Value"].sum() Out[3]: 31.344999999999999
- python "-" тире, показывающий как "\ xe2 \ x80 \ x94" – как исправить
- Это ошибка в Киви? DropDown + ScreenManager не работает должным образом
- Python, suds, управление массивом
- Тернарный оператор на массивах в python
- Как избавиться от нулей каждого массива в списке массива в Python?
- Чтение данных в массив numpy из текстового файла
- Создание элементов «R» и «B» в двумерном RGB-массиве в Python
- Почему я не могу обнаружить, что кортеж пуст?
- Общий размер массива должен быть неизменным
- Почему мне нужно указывать размер этого списка, иначе он выдаст ошибку индекса индекса вне диапазона
- Построение массива numpy в healpy