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_countspodrí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
daaty el nombre de la columna esYEARMONTHfuente
DISTINCTrequisito 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íapplyllamada 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'scomentario,3novak'sque funcionó para mí.Usando
crosstab, esto devolverá más información quegroupbynuniqueDespués de un poco de modificación, produzca el resultado.
fuente
YEARMONTHycount. ¿También puedo configurar el recuento en orden descendente?También estoy usando,
nuniquepero 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 (
CLIENTCODEen su caso), podemos usarnunique. Podemos pasar la entrada como un diccionario enaggfunción, junto con agregaciones en otras columnas:fuente