266 votes

Compter les valeurs uniques dans une colonne de la base de données pandas comme dans Qlik?

Si j'ai une table comme celle-ci:

 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']
})
 

Je peux faire count(distinct hID) dans Qlik pour arriver à un compte de 5 pour un hID unique. Comment puis-je faire cela en python en utilisant une base de données pandas? Ou peut-être un tableau numpy? De même, si je devais faire count(hID) j'aurais 8 à Qlik. Quelle est la manière équivalente de le faire chez les pandas?

405voto

Scott Boston Points 48995

Le comte district valeurs, utilisez nunique:

df['hID'].nunique()
5

Compter uniquement les valeurs non null, utilisez count:

df['hID'].count()
8

Le comte valeurs totales, y compris les valeurs null, utilisez size d'attribut:

df['hID'].size
8

Edit pour ajouter une condition

Utiliser des booléens indexation:

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

OU à l'aide de query:

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

Sortie:

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

211voto

oumar Points 261

Si je suppose que data est le nom de votre dataframe, vous pouvez faire:

 data['race'].value_counts()
 

cela vous montrera l'élément distinct et leur nombre d'occurrence.

55voto

piRSquared Points 159

Ou obtenir le nombre de valeurs uniques pour chaque colonne:

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

Nouveau 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

Vous avez toujours été en mesure de faire une agg dans un groupby. J'ai utilisé stack à la fin parce que j'aime la meilleure présentation.

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

9voto

Psidom Points 115100

Vous pouvez utiliser nunique dans les pandas:

 df.hID.nunique()
# 5
 

-4voto

vous pouvez utiliser une propriété unique en utilisant la fonction len

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X