J'utilise pandas comme substitut db car j'ai plusieurs bases de données (oracle, mssql, etc.) et je ne peux pas faire une séquence de commandes vers un équivalent SQL.
J'ai une table chargée dans un DataFrame avec quelques colonnes:
YEARMONTH, CLIENTCODE, SIZE, .... etc etc
En SQL, compter le nombre de clients différents par an serait:
SELECT count(distinct CLIENTCODE) FROM table GROUP BY YEARMONTH;
Et le résultat serait
201301 5000
201302 13245
Comment puis-je faire cela chez les pandas?
value_counts
peut-être la réponse que vous recherchez: pandas.pydata.org/pandas-docs/stable/generated/…Réponses:
Je crois que c'est ce que vous voulez:
Exemple:
la source
nunique
? Essayez comme je pourrais, je ne peux pas trouver un moyen, car le résultat de cette réponse est unSeries
, pas unDataFrame
.Voici une autre méthode, très simple, disons que votre nom de trame de données est
daat
et que le nom de la colonne estYEARMONTH
la source
DISTINCT
exigence de la question! De plus, il n'inclut pas le nombre deNaN
!Chose intéressante, est très souvent
len(unique())
plusieurs fois (3x-15x) plus rapide quenunique()
.la source
.CLIENTCODE.apply(lambda x: len(x.unique()))
, d' iciapply
appel avec un lambda. Par exemple,df.groupby('YEARMONTH')['CLIENTCODE'].apply(lambda x: x.unique().shape[0])
.len(df['column'].unique())
pas utilisé la fonction lambdaTypeError: object of type 'method' has no len()
desChen's
commentaires,3novak's
travaillé pour moi.En utilisant
crosstab
, cela renverra plus d'informations quegroupby
nunique
Après un peu de modification, donnez le résultat
la source
YEARMONTH
etcount
. Puis-je également définir le nombre par ordre décroissant?J'utilise également,
nunique
mais ce sera très utile si vous devez utiliser une fonction d'agrégation comme'min', 'max', 'count' or 'mean'
etc.la source
Avec la nouvelle version de pandas, il est facile d'obtenir en tant que trame de données
la source
Voici une approche pour avoir un décompte distinct sur plusieurs colonnes. Ayons quelques données:
Maintenant, listez les colonnes qui vous intéressent et utilisez groupby dans une syntaxe légèrement modifiée:
On obtient:
la source
Distinct de la colonne avec des agrégations sur d'autres colonnes
Pour obtenir le nombre distinct de valeurs pour n'importe quelle colonne (
CLIENTCODE
dans votre cas), nous pouvons utilisernunique
. Nous pouvons passer l'entrée comme un dictionnaire dans laagg
fonction, avec des agrégations sur d'autres colonnes:la source