Cómo contar las ocurrencias de un elemento en un array unidimensional en Python
-
Usando
collections
para encontrar el número de ocurrencias en un array en Python -
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))
La salida resultante es un diccionario. Enumera cuántas veces se ha producido cada elemento del 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)))
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 del 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 del array.