Obtenir des statistiques pour chaque groupe (tels que le comte, moyenne, etc) à l'aide de pandas GroupBy?
J'ai un bloc de données df
et j'ai utiliser plusieurs colonnes pour groupby
:
df['col1','col2','col3','col4'].groupby(['col1','col2']).mean()
Dans la façon décrite ci-dessus, j'ai presque obtenir la table (bloc de données) dont j'ai besoin. Ce qui manque, c'est une colonne supplémentaire qui contient le nombre de lignes dans chaque groupe. En d'autres termes, je veux dire, mais je voudrais aussi savoir combien de nombre ont été utilisées pour obtenir ces moyens. Par exemple dans le premier groupe il y a 8 valeurs et dans la seconde, 10 et ainsi de suite.
En bref: Comment puis-je obtenir groupe-sage les statistiques pour un dataframe?
- Pour les gens qui sont nouveaux à cette question, dans les versions plus récentes de pandas, vous pouvez appeler
describe()
surgroupby
objets des retours statistiques communes efficacement. Voir cette réponse pour plus d'informations.
Vous devez vous connecter pour publier un commentaire.
Sur
groupby
objet, leagg
fonction peut prendre une liste de appliquer plusieurs méthodes d'agrégation à la fois. Cela devrait vous donner le résultat que vous avez besoin:df[['col1','col2','col3','col4']].groupby(['col1','col2']).agg(['mean', 'count'])
count
colonne par groupe.Réponse Rapide:
La façon la plus simple pour obtenir les nombres de lignes par groupe est en appelant
.size()
, qui renvoie unSeries
:Habituellement, vous voulez ce résultat comme un
DataFrame
(au lieu d'unSeries
), de sorte que vous pouvez faire:Si vous voulez savoir comment calculer le nombre de lignes et d'autres statistiques pour chaque groupe de continuer à lire ci-dessous.
Exemple détaillé:
Considérons l'exemple suivant dataframe:
D'abord nous allons utiliser
.size()
pour obtenir les nombres de lignes:Ensuite, nous allons utiliser
.size().reset_index(name='counts')
pour obtenir les nombres de lignes:Y compris les résultats pour plus de statistiques
Quand vous voulez pour calculer des statistiques sur des données groupées, il ressemble généralement à ceci:
Le résultat ci-dessus est un peu ennuyeux à traiter en raison de la imbriquée des étiquettes de colonne, et aussi parce que les nombres de lignes sont par colonne.
Pour gagner plus de contrôle sur la sortie j'ai l'habitude de diviser les statistiques individuelles des agrégations que je puis de les combiner à l'aide de
join
. Il ressemble à ceci:Notes de bas de page
Le code utilisé pour générer les données de test est indiqué ci-dessous:
Avertissement:
Si certaines colonnes que vous l'agrégation des valeurs null, alors vous voulez vraiment être regardant le groupe des nombres de lignes indépendante de l'agrégation pour chaque colonne. Sinon, vous pouvez être induit en erreur quant à la façon dont de nombreux dossiers sont effectivement utilisé pour calculer des choses comme la moyenne, parce que les pandas vont baisser
NaN
entrées dans le calcul moyenne sans vous dire à ce sujet.In [5]: counts_df = pd.DataFrame(df.groupby('col1').size().rename('counts'))
, c'est peut-être préférable de définir la taille de la() dans une nouvelle colonne si vous souhaitez manipuler le dataframe pour de plus amples analyse,qui devrait êtrecounts_df = pd.DataFrame(df.groupby('col1').size().reset_index(name='counts')
isnull
à cette requête de l'avoir dans une colonne?'col4': ['median', 'min', 'count', 'isnull']
Une Fonction pour les gouverner Tous:
GroupBy.décrire
Retourne
count
,mean
,std
, et d'autres statistiques utiles, groupe par groupe.À obtenir des statistiques précises, il suffit de sélectionner eux,
describe
travaille pour plusieurs colonnes (changement['C']
à['C', 'D']
—ou retirez-le complètement et voir ce qui se passe, le résultat est un MultiIndexed colonnes dataframe).Vous bénéficiez également de différentes statistiques pour les données de chaîne. Voici un exemple,
Pour plus d'informations, voir la la documentation.
Nous pouvons facilement le faire en utilisant le groupby et à compter. Mais, nous devrions nous rappeler d'utiliser reset_index().
Créer un objet de groupe et l'appel de méthodes comme l'exemple ci-dessous: