Estoy usando pandas como sustituto de db, ya que tengo varias bases de datos (oracle, mssql, etc.) y no puedo hacer una secuencia de comandos para un equivalente de SQL.
Tengo una tabla cargada en un DataFrame con algunas columnas:
YEARMONTH, CLIENTCODE, SIZE, .... etc etc
En SQL, contar la cantidad de clientes diferentes por año sería:
SELECT count(distinct CLIENTCODE) FROM table GROUP BY YEARMONTH;
Y el resultado sería
201301 5000
201302 13245
¿Cómo puedo hacer eso en pandas?
value_counts
podría ser la respuesta que está buscando: pandas.pydata.org/pandas-docs/stable/generated/…Respuestas:
Creo que esto es lo que quieres:
Ejemplo:
fuente
nunique
? Mucho que lo intentaba no puedo encontrar una manera, ya que el resultado de esta respuesta es unaSeries
, no unaDataFrame
.Aquí hay otro método, muy simple, digamos que el nombre del marco de datos es
daat
y el nombre de la columna esYEARMONTH
fuente
DISTINCT
requisito de la pregunta! ¡Además, no incluye conteos deNaN
!Curiosamente, muy a menudo
len(unique())
es unas pocas veces (3x-15x) más rápido quenunique()
.fuente
.CLIENTCODE.apply(lambda x: len(x.unique()))
, desde aquíapply
llamada con una lambda. Por ejemplo,df.groupby('YEARMONTH')['CLIENTCODE'].apply(lambda x: x.unique().shape[0])
.len(df['column'].unique())
no necesitaba la función lambdaTypeError: object of type 'method' has no len()
deChen's
comentario,3novak's
que funcionó para mí.Usando
crosstab
, esto devolverá más información quegroupby
nunique
Después de un poco de modificación, produzca el resultado.
fuente
YEARMONTH
ycount
. ¿También puedo configurar el recuento en orden descendente?También estoy usando,
nunique
pero será muy útil si tiene que usar una función de agregado como'min', 'max', 'count' or 'mean'
etc.fuente
Con la nueva versión de pandas, es fácil de obtener como marco de datos
fuente
Aquí un enfoque para tener un recuento distinto en varias columnas. Tengamos algunos datos:
Ahora, enumere las columnas de interés y use groupby en una sintaxis ligeramente modificada:
Obtenemos:
fuente
Distintivo de columna junto con agregaciones en otras columnas
Para obtener el número distinto de valores para cualquier columna (
CLIENTCODE
en su caso), podemos usarnunique
. Podemos pasar la entrada como un diccionario enagg
función, junto con agregaciones en otras columnas:fuente