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 |