Comment normaliser chaque ligne d'une DataFrame Pandas en pourcentages ?

Published: 25 septembre 2023

Tags: Python; Pandas; Dataframe;

DMCA.com Protection Status

Normaliser chaque ligne d'une DataFrame Pandas en pourcentages est une étape intéressante à prendre lors de l'analyse des données. En normalisant les données, nous pouvons facilement comparer les valeurs entre différentes lignes et mieux comprendre l'importance relative de chaque valeur dans le jeu de données.

Créer des données synthétiques.

import pandas as pd
import numpy as np

np.random.seed(42)

data = np.random.random_sample((6, 2)) * 10

df = pd.DataFrame(data,columns=['A','B'])

donne

              A         B
    0  3.745401  9.507143
    1  7.319939  5.986585
    2  1.560186  1.559945
    3  0.580836  8.661761
    4  6.011150  7.080726
    5  0.205845  9.699099

Donc, le but ici est de normaliser chaque ligne de la DataFrame en pourcentages.

Étape 1 : Additionner individuellement les lignes

Pour ce faire, nous devons d'abord diviser chaque valeur d'une ligne par la somme de toutes les valeurs de cette ligne. Cela nous donnera un nombre compris entre 0 et 1, représentant le pourcentage de chaque valeur par rapport au total de cette ligne.

df.sum(axis=1)

donne

0    13.252544
1    13.306524
2     3.120132
3     9.242598
4    13.091876
5     9.904943
dtype: float64

Étape 2 : Diviser chaque ligne par la somme

df[['A','B']].div(df.sum(axis=1), axis=0)

donne

          A         B
0  0.282618  0.717382
1  0.550102  0.449898
2  0.500039  0.499961
3  0.062843  0.937157
4  0.459151  0.540849
5  0.020782  0.979218

Étape 3 : Multipliez par 100

Nous multiplions ensuite par 100 pour obtenir une valeur en pourcentage.

df[['A','B']].div(df.sum(axis=1), axis=0) * 100

Cela créera une nouvelle DataFrame, chaque ligne représentant le pourcentage de chaque valeur dans la DataFrame d'origine. Maintenant, nous pouvons facilement comparer les valeurs entre différentes lignes et mieux comprendre l'importance relative de chaque valeur dans l'ensemble de données.

           A          B
0  28.261752  71.738248
1  55.010153  44.989847
2  50.003865  49.996135
3   6.284339  93.715661
4  45.915117  54.084883
5   2.078204  97.921796

Dataframe normalisée et arrondi

(df[['A','B']].div(df.sum(axis=1), axis=0) * 100).round(2)

donne

       A      B
0  28.26  71.74
1  55.01  44.99
2  50.00  50.00
3   6.28  93.72
4  45.92  54.08
5   2.08  97.92

Références

Liens Site
pandas.DataFrame.sum pandas.pydata.org
pandas.DataFrame.div pandas.pydata.org