111 votes

Pandas de Python : Convertir les lignes en en-têtes de colonne

J'ai le cadre de données suivant :

Year    Country          medal    no of medals
1896    Afghanistan      Gold        5
1896    Afghanistan      Silver      4
1896    Afghanistan      Bronze      3
1896    Algeria          Gold        1
1896    Algeria          Silver      2
1896    Algeria          Bronze      3

Je le veux comme ça.

Year    Country      Gold   Silver   Bronze
1896    Afghanistan    5      4         3
1896    Algeria        1      2         3

L'empilage et le dépilage ne semblent pas fonctionner.

139voto

Andy Hayden Points 38010

Vous êtes à la recherche de pivot_table :

In [11]: medals = df.pivot_table('no of medals', ['Year', 'Country'], 'medal')

In [12]: medals
Out[12]:
medal             Bronze  Gold  Silver
Year Country
1896 Afghanistan       3     5       4
     Algeria           3     1       2

et si vous voulez réorganiser les colonnes :

In [12]: medals.reindex_axis(['Gold', 'Silver', 'Bronze'], axis=1)
Out[12]:
medal             Gold  Silver  Bronze
Year Country
1896 Afghanistan     5       4       3
     Algeria         1       2       3

14voto

Manu Sharma Points 177

L'empilement/dépilement ne fonctionnera pas tant que vous n'aurez pas la colonne souhaitée dans vos index de ligne/colonne. En d'autres termes, l'empilement/dépilement ramènera le niveau le plus bas de l'index de colonne au niveau le plus bas de l'index de ligne et vice versa.

Donc, dans votre cas, vous pouvez obtenir les mêmes résultats avec stack/unstack en

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X