with type the that same from for exclude describe columns before aren all python statistics pandas frequency

type - pandas python statistics



Tabla de frecuencia para una sola variable (3)

La respuesta proporcionada por @DSM es simple y directa, pero pensé que agregaría mi propia opinión a esta pregunta. Si miras el código de pandas.value_counts , verás que están sucediendo muchas cosas.

Si necesita calcular la frecuencia de muchas series, esto podría demorar un tiempo. Una implementación más rápida sería usar numpy.unique con return_counts = True

Aquí hay un ejemplo:

import pandas as pd import numpy as np my_series = pd.Series([1,2,2,3,3,3]) print(my_series.value_counts()) 3 3 2 2 1 1 dtype: int64

Observe aquí que el artículo devuelto es pandas.Series

En comparación, numpy.unique devuelve una tupla con dos elementos, los valores únicos y los recuentos.

vals, counts = np.unique(my_series, return_counts=True) print(vals, counts) [1 2 3] [1 2 3]

A continuación, puede combinarlos en un diccionario:

results = dict(zip(vals, counts)) print(results) {1: 1, 2: 2, 3: 3}

Y luego en un pandas.Series

print(pd.Series(results)) 1 1 2 2 3 3 dtype: int64

Una última pregunta para pandas novatos del día: ¿cómo puedo generar una tabla para una sola serie?

Por ejemplo:

my_series = pandas.Series([1,2,2,3,3,3]) pandas.magical_frequency_function( my_series ) >> { 1 : 1, 2 : 2, 3 : 3 }

Un montón de google me ha llevado a Series.describe () y pandas.crosstabs, pero ninguno de estos hace todo lo que necesito: una variable, cuenta por categorías. Ah, y estaría bien si funcionara para diferentes tipos de datos: cadenas, entradas, etc.


Puede usar la comprensión de listas en un marco de datos para contar las frecuencias de las columnas como tales

[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=[''O'']).columns)]

Descompostura:

my_series.select_dtypes(include=[''O''])

Selecciona solo los datos categóricos

list(my_series.select_dtypes(include=[''O'']).columns)

Convierte las columnas de arriba en una lista

[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=[''O'']).columns)]

Itera en la lista de arriba y aplica value_counts () a cada una de las columnas


Tal vez .value_counts() ?

>>> import pandas >>> my_series = pandas.Series([1,2,2,3,3,3, "fred", 1.8, 1.8]) >>> my_series 0 1 1 2 2 2 3 3 4 3 5 3 6 fred 7 1.8 8 1.8 >>> counts = my_series.value_counts() >>> counts 3 3 2 2 1.8 2 fred 1 1 1 >>> len(counts) 5 >>> sum(counts) 9 >>> counts["fred"] 1 >>> dict(counts) {1.8: 2, 2: 2, 3: 3, 1: 1, ''fred'': 1}