Skip to content
Tutoriels
Pandas
Pandas Crosstab: Create Simple Cross Tabulation Tables in Python

Pandas Crosstab : Créer des tables de tabulation croisée simples en Python

La tabulation croisée est un outil puissant en analyse de données, nous permettant d'inspecter la relation entre deux ou plusieurs variables catégorielles ou discrètes. Cet article explorera le monde de la fonction crosstab de pandas, une fonction de la bibliothèque pandas de Python qui simplifie la création de tables de tabulation croisée. Nous explorerons ce qu'est la fonction crosstab de pandas, comment elle se compare à la fonction de tableau croisé dynamique, et comment l'utiliser efficacement pour la manipulation de données.

Pandas est un outil populaire de manipulation de données en Python, offrant une variété de fonctions pour l'analyse de données. Une de ces fonctions est la crosstab, qui permet une tabulation croisée facile, offrant une façon simple mais efficace de comprendre les relations dans vos données. Que vous soyez un analyste de données chevronné ou un débutant dans le domaine, comprendre comment utiliser la crosstab de pandas peut considérablement améliorer vos compétences en manipulation de données.

Vous voulez créer rapidement une visualisation de données à partir d'un dataframe Python Pandas sans code ?

PyGWalker est une bibliothèque Python pour l'analyse exploratoire de données avec visualisation. PyGWalker (opens in a new tab) peut simplifier votre flux de travail d'analyse de données et de visualisation de données dans Jupyter Notebook, en transformant votre dataframe pandas (et le dataframe polars) en une interface utilisateur de style Tableau pour l'exploration visuelle.

PyGWalker pour la visualisation des données (opens in a new tab)

Qu'est-ce que la Crosstab de Pandas ?

La crosstab de Pandas est une fonction qui permet de créer facilement une table de tabulation croisée de deux (ou plusieurs) facteurs. Elle calcule une simple table de tabulation croisée de deux ou plusieurs tableaux de données. Par défaut, elle fournit une table de fréquence des facteurs à moins qu'un tableau de valeurs et une fonction d'agrégation ne soient passés.

Voici un exemple basique de l'utilisation de la crosstab de pandas :

import pandas as pd
 
## Données d'exemple
data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
        'B': ['one', 'one', 'two', 'two', 'one', 'one'],
        'C': ['small', 'large', 'large', 'small', 'small', 'large'],
        'D': [1, 2, 2, 3, 3, 4]}
df = pd.DataFrame(data)
 
## Utiliser la crosstab
table = pd.crosstab(df['A'], df['B'])
print(table)

Dans cet exemple, nous créons un DataFrame à partir d'un dictionnaire, puis utilisons la crosstab de pandas pour créer une table de tabulation croisée qui montre la fréquence des catégories de 'B' pour chaque catégorie de 'A'.

Dois-je utiliser un tableau croisé dynamique ou une crosstab de pandas ?

Bien que les tableaux croisés dynamiques (pivot tables) et les crosstabs de pandas servent à des fins similaires, ils sont utilisés dans des scénarios légèrement différents. Le tableau croisé dynamique est une solution plus générale, utilisée pour créer une nouvelle table dérivée à partir d'une table donnée. En revanche, la crosstab est plus spécialisée dans le calcul des fréquences de groupe.

Le tableau croisé dynamique peut traiter plusieurs types de données d'entrée et peut gérer plusieurs noms d'index et de colonnes, tandis que la crosstab est principalement utilisée pour les tables de fréquence. Donc, si vous cherchez à créer une table de fréquence, la crosstab de pandas est la solution. Cependant, si vous travaillez sur des tâches de manipulation de données plus complexes, un tableau croisé dynamique peut être un meilleur choix.

Comment définir une crosstab en Python ?

Définir une crosstab en Python en utilisant pandas est simple. La syntaxe de base pour créer une crosstab est la suivante :

pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name: str = 'All', dropna: bool = True, normalize=False)

Voici ce que chaque paramètre signifie :

  • index : semblable à un tableau, valeurs à regrouper par ligne.
  • columns : semblable à un tableau, valeurs à regrouper par colonnes.
  • values : semblable à un tableau, optionnel, tableau de valeurs à agréger selon les facteurs.
  • rownames : séquence, par défaut None, si spécifié, doit correspondre au nombre de tableaux de lignes passées.
  • colnames : séquence, par défaut None, si spécifié, doit correspondre au nombre de tableaux de colonnes passées.
  • aggfunc : fonction, optionnel, si spécifié, nécessite que values soit spécifié aussi.
  • margins : booléen, par défaut False, ajouter des marges de ligne/colonne (sous-totaux).
  • margins_name : str, par défaut 'All', nom de la ligne/colonne qui contiendra les totaux lorsque margins est True.
  • dropna : booléen, par défaut True, ne pas inclure les colonnes dont toutes les entrées sont NaN.
  • normalize : booléen, columns, ou 1, par défaut False. Normaliser en divisant toutes les valeurs par la somme des valeurs.

Comment créer une crosstab avec des pourcentages en pandas ?

Créer une crosstab avec des pourcentages en pandas est assez simple. Il vous suffit de définir le paramètre normalize sur True ou de spécifier l'axe (index ou colonnes) que vous souhaitez normaliser. Voici un exemple :

import pandas as pd
 
## Données d'exemple
data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
        'B': ['one', 'one', 'two', 'two', 'one', 'one'],
        'C': ['small', 'large', 'large', 'small', 'small', 'large'],
        'D': [1, 2, 2, 3, 3, 4]}
df = pd.DataFrame(data)
 
## Utiliser la crosstab avec la normalisation
table = pd.crosstab(df['A'], df['B'], normalize=True)
print(table)

Dans cet exemple, la crosstab affichera la proportion de chaque catégorie au lieu du décompte, offrant une image plus claire de la répartition des catégories.

Quelles sont quelques façons faciles de créer une crosstab en pandas ?

Il existe plusieurs façons de créer des crosstabs en pandas, et la meilleure méthode dépend de vos besoins spécifiques. Voici trois façons faciles de créer des crosstabs :

  1. Crosstab basique : La façon la plus simple de créer une crosstab est de passer deux séries à la fonction crosstab de pandas, qui fournira une table de fréquence.

  2. Crosstab avec Agrégation: Si vous avez une troisième série de valeurs, vous pouvez la passer à la fonction crosstab avec une fonction d'agrégation (comme moyenne, somme, etc.) pour obtenir une crosstab plus complexe.

  3. Crosstab avec Normalisation: En définissant le paramètre normalize sur True, vous pouvez créer une crosstab qui montre la proportion de chaque catégorie, ce qui peut être utile pour comprendre la distribution des catégories.

Exemple de Crosstab avec Pandas

Plongeons dans un exemple pratique d'utilisation de la crosstab avec Pandas. Supposons que nous ayons un ensemble de données sur les ventes d'un magasin, y compris le type de produit vendu, le vendeur qui a effectué la vente et le nombre d'unités vendues. Nous voulons créer une crosstab qui montre le nombre total d'unités vendues par chaque vendeur pour chaque type de produit.

import pandas as pd
 
# Données d'exemple
data = {'Produit': ['Pommes', 'Oranges', 'Bananes', 'Pommes', 'Bananes', 'Bananes'],
        'Vendeur': ['John', 'John', 'Claire', 'Claire', 'John', 'Claire'],
        'Unités': [5, 3, 8, 7, 2, 4]}
df = pd.DataFrame(data)
 
# Utiliser la crosstab avec agrégation
tableau = pd.crosstab(df['Vendeur'], df['Produit'], values=df['Unités'], aggfunc='sum')
print(tableau)

Dans cet exemple, la crosstab montre le nombre total d'unités vendues de chaque type de produit par chaque vendeur. C'est une façon puissante de résumer et de visualiser vos données.

Comment Trier une Crosstab avec Pandas

Trier une crosstab avec Pandas est aussi simple que d'utiliser la fonction sort_values. Vous pouvez trier par une colonne spécifique ou par l'index. Voici un exemple :

# Poursuivre depuis l'exemple précédent
# Trier par 'Pommes'
tableau = tableau.sort_values('Pommes', ascending=False)
print(tableau)

Dans cet exemple, la crosstab est triée par la colonne 'Pommes' dans l'ordre décroissant. Vous pouvez facilement modifier cela pour trier par une autre colonne ou dans l'ordre croissant.

Compter et Pourcentage dans une Crosstab Pandas

Parfois, vous pouvez vouloir obtenir à la fois le nombre et le pourcentage dans votre crosstab. Cela peut être réalisé en créant deux crosstabs et en les concaténant. Voici comment procéder :

# Poursuivre depuis le premier exemple
# Créer la crosstab de comptage
tableau_comptage = pd.crosstab(df['Vendeur'], df['Produit'])
 
# Créer la crosstab de pourcentage
tableau_pourcentage = pd.crosstab(df['Vendeur'], df['Produit'], normalize='index')
 
# Concaténer les deux tableaux
tableau_final = pd.concat([tableau_comptage, tableau_pourcentage], keys=['Comptage', 'Pourcentage'])
print(tableau_final)

Dans cet exemple, la crosstab finale montre à la fois le compte et le pourcentage de chaque catégorie. Cela peut être très utile pour avoir une vue complète de vos données.

Foire aux questions

Qu'est-ce que la crosstab de Pandas ?

La crosstab de Pandas est une fonction de la bibliothèque Pandas de Python qui vous permet de créer une table de contingence de deux facteurs ou plus. Elle offre un moyen simple et efficace de comprendre les relations dans vos données.

Comment définir une crosstab en Python ?

Définir une crosstab en Python en utilisant Pandas est simple. La syntaxe de base pour créer une crosstab est pd.crosstab(index, columns), où index et columns sont les valeurs pour regrouper par lignes et colonnes, respectivement.

Comment créer une crosstab avec des pourcentages en Pandas ?

Pour créer une crosstab avec des pourcentages en Pandas, vous devez définir le paramètre normalize sur True ou spécifier l'axe (index ou colonnes) que vous souhaitez normaliser. Cela créera une crosstab qui montre la proportion de chaque catégorie, offrant ainsi une image plus claire de la distribution des catégories.