Remodeler la base de données pandas avec pivot_table en Python – tutoriel et visualisation

Remodeler la base de données pandas avec pivot_table en Python – tutoriel et visualisation

Nous souhaitons souvent conserver les colonnes identifiantes telles quelles (index=["student", "school"]), mais pivotez ou «divisez» les valeurs d’une colonne (values="grade") basé sur une autre colonne (columns="class"). Comparez les trames de données originales et pivotées ci-dessous et vous comprendrez ce que cela signifie.

df_long.pivot_table(index=["student", "school"], 
columns='class',
values='grade')
Long à large: les valeurs de grade sont divisées / pivotées en trois colonnes distinctes (code d’exécution ici)

Vous pouvez également agréger chaque ligne et colonne résultante en spécifiant margins=True (défaut False).

df_long.pivot_table(index=["student", "school"], 
columns='class',
values='grade',
margins=True, # add margins
aggfunc='sum') # sum margins (rows/columns)
Long à large: les marges sont incluses (code d’exécution ici)

Si nous ne spécifions aucune colonne via columns, tout non-identifiant restant numérique les colonnes (uniquement la note dans ce cadre de données) seront pivotées (de long à large).

df_long.pivot_table(index=["student", "school"])
Long à large: toutes les colonnes numériques non identifiantes sont pivotées (code d’exécution ici)
df_long.groupby(['student', 'school']).mean().reset_index()  student school  grade
0 Andy Z 20
1 Bernie Y 200
2 Cindy Z 2000
3 Deb Y 20000
df_long.pivot_table(index=["student", "school"], 
aggfunc=['max', 'first'])
# groupby equivalent
# df_long.groupby(["student", "school"]).agg(['max', 'first'])
max first
class grade class grade
student school
Andy Z physics 30 english 10
Bernie Y physics 300 english 100
Cindy Z physics 3000 english 1000
Deb Y physics 30000 english 10000

Le dernier exemple vous montre ce qui se passe lorsque vous faites pivoter plusieurs colonnes (columns=['school', 'class']) et vous pouvez également traiter les valeurs manquantes après pivotement en remplaçant le NaN valeurs avec une autre valeur (-5 dans l’exemple ci-dessous).

df_long.pivot_table(index="student", 
columns=['school', 'class'],
values='grade',
fill_value=-5) # replace NaN with -5
Long à large: les valeurs manquantes sont remplacées par -5 (NaN par défaut) (exécuter le code ici)

J’espère que vous comprenez maintenant mieux comment pd.pivot_table remodèle les trames de données. J’attends vos réflexions et commentaires avec impatience.