Cómo contar las ocurrencias de un elemento en un array unidimensional en Python

  1. Usando collections para encontrar el número de ocurrencias en un array en Python
  2. Usando la biblioteca NumPy para encontrar el número de ocurrencias en un array en Python

Mientras se trabaja con un array, uno de los mayores problemas que un desarrollador puede enfrentar es contar el número de ocurrencias de un ítem. Imagina que tienes un array del número de artículos vendidos en un sitio de comercio electrónico durante 10 días, te gustaría saber el número de días en que se venden más de 100 artículos.

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

La forma más fácil de resolverlo es obtener un conteo del número de veces que ocurren 100 en el array.

Usando collections para encontrar el número de ocurrencias en un array en Python

Las collections actúan como contenedores para almacenar las colecciones de datos. Podemos importar fácilmente el módulo collections y usar la función Counter.

Revisa el código de abajo:

>>>import collections
>>>sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]  
>>>print(collections.Counter(sales))
Counter({100: 4, 80: 3, 70: 2, 10: 2, 0: 1, 20: 1, 30: 1, 40: 1})

La salida resultante es un diccionario. Enumera cuántas veces se ha producido cada elemento de el array.

Sin embargo, si queremos imprimir el número de veces que ocurren 100 en el array de sales, podemos obtenerlo del diccionario.

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

El módulo collections también trabaja con números decimales y cadenas.

>>>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})

Usando la biblioteca NumPy para encontrar el número de ocurrencias en un array en Python

Sin embargo, también podemos usar NumPy, que es una biblioteca definida en Python para manejar grandes matrices y que también contiene un gran número de funciones matemáticas.

Hay varias maneras de usar las funciones definidas en NumPy para devolver los recuentos de artículos en un array.

Usando la función unique en Numpy

La función unique junto con el Conteo, devuelve un diccionario del conteo de cada ítem. También funciona con números decimales y cadenas.

>>>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)));  
{0: 1, 10: 2, 20: 1, 30: 1, 40: 1, 70: 2, 80: 3, 100: 4}

Usando la función count_nonzero en Numpy

Usando el count_nonzero devuelve el recuento del artículo que estamos buscando. Proporciona una interfaz fácil de leer y menos líneas 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

count_nonzero también funciona con números decimales y cadenas.

>>>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

Usando la función bincount en Numpy - sólo para el array con números enteros

Sin embargo, si tienes un array que sólo tiene números enteros, puedes usar la función bincount de NumPy. La mejor parte es que devuelve los resultados como un 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 los números de el array, el resultado muestra el recuento de artículos en orden ascendente. Por ejemplo, 0 en el array abit ocurre 5 veces y 10 ocurre 2 veces como indica el primer y último ítem de el array.

Artículo relacionado - Python Array

  • Mezclar un array en Python
  • Convertir Numpy Array a List en Python