¿Contando valores únicos en una columna en pandas dataframe como en Qlik?


100

Si tengo una mesa como esta:

df = pd.DataFrame({
         'hID': [101, 102, 103, 101, 102, 104, 105, 101],
         'dID': [10, 11, 12, 10, 11, 10, 12, 10],
         'uID': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
         'mID': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C']
})

Puedo hacer count(distinct hID)en Qlik para llegar a un recuento de 5 para un HID único. ¿Cómo hago eso en Python usando un marco de datos de pandas? ¿O tal vez una matriz numpy? Del mismo modo, si tuviera que hacerlo count(hID), obtendría 8 en Qlik. ¿Cuál es la forma equivalente de hacerlo en pandas?


@piRSquared gracias. Podría hacer algo como df [['dID', 'hID']]. Agg (['count', 'size', 'nunique']) y funciona. Pero no funciona cuando se combina con groupby. Entonces df [['dID', 'hID']]. Groupby ('mID'). Agg (['count', 'size', 'nunique']) dice KeyError. ¿Hay alguna forma de seleccionar columnas particulares y aplicar una condición?
Alhpa Delta

Tres formas df[['mID', 'dID','hID']].groupby('mID').agg(['count', 'size', 'nunique'])
piRSquared

Odf[['dID','hID']].groupby(df['mID']).agg(['count', 'size', 'nunique'])
piRSquared

1
Odf.groupby('mID')[['dID', 'hID']].agg(['count', 'size', 'nunique'])
piRSquared

Respuestas:


180

Cuente valores distintos, use nunique:

df['hID'].nunique()
5

Cuente solo valores no nulos, use count:

df['hID'].count()
8

Cuente los valores totales, incluidos los valores nulos, use el sizeatributo:

df['hID'].size
8

Editar para agregar condición

Utilice la indexación booleana:

df.loc[df['mID']=='A','hID'].agg(['nunique','count','size'])

O usando query:

df.query('mID == "A"')['hID'].agg(['nunique','count','size'])

Salida:

nunique    5
count      5
size       5
Name: hID, dtype: int64

¡Gracias! ¿Cómo agregamos una condición? ¿Como nunique para mID = 'A'?
Alhpa Delta

66

Si asumo que los datos son el nombre de su marco de datos, puede hacer:

data['race'].value_counts()

esto le mostrará el elemento distintivo y su número de ocurrencia.


Si desea las proporciones para cada artículo único, también puede hacerlo. data['race'].value_counts(normalize=True)
falso

24

O obtenga el número de valores únicos para cada columna:

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

Nuevo en pandas 0.20.0 pd.DataFrame.agg

df.agg(['count', 'size', 'nunique'])

         dID  hID  mID  uID
count      8    8    8    8
size       8    8    8    8
nunique    3    5    3    5

Siempre has sido capaz de hacer un agginside a groupby. Usé stackal final porque me gusta más la presentación.

df.groupby('mID').agg(['count', 'size', 'nunique']).stack()


             dID  hID  uID
mID                       
A   count      5    5    5
    size       5    5    5
    nunique    3    5    5
B   count      2    2    2
    size       2    2    2
    nunique    2    2    2
C   count      1    1    1
    size       1    1    1
    nunique    1    1    1

¡Gracias! ¿Cómo agregamos una condición? ¿Como nunique para mID = 'A'?
Alhpa Delta

@AlhpaDelta Agregué algo al final. Espero que ayude
piRSquared


0

Para contar valores únicos en la columna, digamos hIDdel marco de datos df, use:

len(df.hID.unique())

-3

puede usar una propiedad única usando la función len

len (df ['HID']. único ()) 5

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.