Como contar as ocorrências de um item em uma array unidimensional em Python

Debolina Dasgupta 30 janeiro 2023
  1. Use collections para encontrar o número de ocorrências em um array em Python
  2. Utilize a biblioteca NumPy para encontrar o número de ocorrências em um array em Python
Como contar as ocorrências de um item em uma array unidimensional em Python

Ao trabalhar com um array, um dos maiores problemas que um desenvolvedor pode enfrentar é a contagem do número de ocorrências de um item. Imagine se você tiver uma array do número de itens vendidos em um site de eCommerce durante 10 dias, você gostaria de saber o número de dias em que mais de 100 itens são vendidos.

sales = [0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]

A maneira mais fácil de resolver é obter uma contagem do número de vezes 100 ocorrências na array.

Use collections para encontrar o número de ocorrências em um array em Python

collections atuam como recipientes para armazenar coleções de dados. Podemos importar facilmente o módulo collections e utilizar a função Counter.

Verifique o código abaixo:

import collections

sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]  

print(collections.Counter(sales))

A saída resultante é um dicionário. Ele lista quantas vezes cada item do array já ocorreu.

Entretanto, se quisermos imprimir o número de vezes 100 que ocorre na array de sales, podemos ir buscá-lo no dicionário.

>>>print(collections.Counter(sales)[100])
4

O módulo collections também funciona com números decimais e strings.

floatarr=[0.7, 10.0, 10.1, .8, .7, .8, .2, .1, 10.0, 
10.0, .8, .8, .7, .7, .8]
print(collections.Counter(floatarr))
#Counter({0.8: 5, 0.7: 4, 10.0: 3, 10.1: 1, 0.2: 1, 0.1: 1})

stringarr=["george","mark","george","steve","george"]
print(collections.Counter(stringarr))
#Counter({'george': 3, 'mark': 1, 'steve': 1})

Utilize a biblioteca NumPy para encontrar o número de ocorrências em um array em Python

Entretanto, também podemos usar a NumPy, que é uma biblioteca definida em Python para lidar com grandes arrays e também contém um grande número de funções matemáticas.

Há várias maneiras de usar as funções definidas em NumPy para retornar as contagens de itens em uma array.

Utilize a função unique no NumPy

A função unique junto com a função Count, retorna um dicionário da contagem de cada item. Também funciona com números decimais e strings.

import collections, numpy

aUnique = numpy.array([0, 100, 100, 80, 70, 80, 20, 10, 100, 
100, 80, 70, 10, 30, 40])

unique, counts = numpy.unique(aUnique, return_counts=True)

print(dict(zip(unique, counts)))

Utilize a função count_nonzero em NumPy

Utilizando o count_nonzero devolve a contagem do item que estamos procurando. Ele fornece uma interface de fácil leitura e menos linhas de código.

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10, 
100, 100, 80, 70, 10, 30, 40,"abc"])
>>>print(numpy.count_nonzero(aCountZero == "abc"))
1

O count_nonzero também funciona com números decimais e strings.

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10,

100, 100, 80, 70, 10, 30, 40])

>>>print(numpy.count_nonzero(aCountZero == 100.1))
1

Utilize a função bincount em NumPy - Somente para Array com inteiros

Entretanto, se você tiver um array que tenha apenas inteiros, você pode utilizar a função bincount da NumPy. A melhor parte é que ele retorna os resultados como um array.

>>>abit = numpy.array([0, 6, 0, 10, 0, 1, 1, 0, 10, 9, 0, 1])

>>>print(numpy.bincount(abit))

[5 3 0 0 0 0 1 0 0 1 2]

Para os números no array, o resultado exibe a contagem dos itens em ordem ascendente. Por exemplo, 0 no array abit ocorre 5 vezes e 10 vezes como indicado pelo primeiro e último item do array.

Artigo relacionado - Python Array