Contando valores únicos em uma coluna no dataframe do pandas como no Qlik?


106

Se eu tiver uma 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']
})

Posso fazer count(distinct hID)no Qlik para chegar a uma contagem de 5 para hID exclusivo. Como faço isso em python usando um dataframe pandas? Ou talvez uma matriz numpy? Da mesma forma, se count(hID)eu fizer isso, terei 8 no Qlik. Qual é a forma equivalente de fazer isso nos pandas?


@piRSquared thanks. Eu poderia fazer algo como df [['dID', 'hID']]. Agg (['count', 'size', 'nunique']) e funciona. Mas não funciona quando combinado com groupby. Portanto, df [['dID', 'hID']]. Groupby ('mID'). Agg (['count', 'size', 'nunique']) diz KeyError. existe uma maneira de selecionar colunas específicas e aplicar uma condição?
Alhpa Delta de

Três maneiras df[['mID', 'dID','hID']].groupby('mID').agg(['count', 'size', 'nunique'])
piRSquared de

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

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

Respostas:


192

Conte valores distintos, use nunique:

df['hID'].nunique()
5

Conte apenas valores não nulos, use count:

df['hID'].count()
8

Conte os valores totais, incluindo valores nulos, use o sizeatributo:

df['hID'].size
8

Edite para adicionar condição

Use indexação booleana:

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

OU usando query:

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

Resultado:

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

Obrigado! Como adicionamos uma condição? Como nunique para mID = 'A'?
Alhpa Delta de

73

Se eu assumir que data é o nome do seu dataframe, você pode fazer:

data['race'].value_counts()

isso mostrará o elemento distinto e seu número de ocorrência.


Se você quiser as proporções de cada item exclusivo, também pode fazer. data['race'].value_counts(normalize=True)
falso

25

Ou obtenha o número de valores únicos para cada coluna:

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

Novo em 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

Você sempre foi capaz de fazer um aggdentro de a groupby. Usei stackno final porque gosto mais da apresentação.

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

Obrigado! Como adicionamos uma condição? Como nunique para mID = 'A'?
Alhpa Delta de

@AlhpaDelta Eu adicionei algo no final. Espero que ajude
piRSquared de


0

Para contar valores únicos na coluna, digamos hIDde dataframe df, use:

len(df.hID.unique())

-3

você pode usar uma propriedade única usando a função len

len (df ['hID']. exclusivo ()) 5

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.