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 trouver un nombre 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?
Compter les valeurs de conflit, utilisez nunique
:
df['hID'].nunique()
5
Compter uniquement les valeurs non NULL, utilisez count
:
df['hID'].count()
8
Compter les valeurs totales, y compris les valeurs NULL, utiliser l'attribut size
:
df['hID'].size
8
Utilisez l'indexation booléenne:
df.loc[df['mID']=='A','hID'].agg(['nunique','count','size'])
OU en utilisant query
:
df.query('mID == "A"')['hID'].agg(['nunique','count','size'])
Sortie:
nunique 5
count 5
size 5
Name: hID, dtype: int64
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.
Ou obtenez le nombre de valeurs uniques pour chaque colonne:
df.nunique()
dID 3
hID 5
mID 3
uID 5
dtype: int64
Nouveau dans 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é capable de faire une agg
dans une groupby
. J'ai utilisé stack
à la fin parce que j'aime mieux la 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
Vous pouvez utiliser nunique
in pandas:
df.hID.nunique()
# 5
vous pouvez utiliser une propriété unique en utilisant la fonction len
len (df ['hID']. unique ()) 5