web-dev-qa-db-fra.com

python - Pandas - Dataframe.set_index - Comment conserver l'ancienne colonne d'index

J'ai cette Dataframe:

import pandas as pd
df = pd.DataFrame({'Hugo' : {'age' : 21, 'weight' : 75},
                   'Bertram': {'age' : 45, 'weight' : 65},
                   'Donald' : {'age' : 75, 'weight' : 85}}).T
df.index.names = ['name']


         age  weight
name                
Bertram   45      65
Donald    75      85
Hugo      21      75

Je veux changer l'index à la colonne 'age':

df.set_index('age', inplace=True)

     weight
age        
45       65
75       85
21       75

L'ancien nom de la colonne d'index est perdu. Existe-t-il un moyen de modifier l'index sans perdre la colonne d'index d'origine et de retrouver l'ancienne colonne dans la colonne "normale", de sorte qu'elle ressemble à ceci?

     name       weight
age        
45   Bertram    65
75   Donald     85
21   Hugo       75
5
Egirus Ornila

Utilisez reset_index first puis/ set_index :

df = df.reset_index().set_index('age')
print (df)
        name  weight
age                 
45   Bertram      65
75    Donald      85
21      Hugo      75
7
jezrael

Ajout du append=True et avec reset_index

df.set_index('age', append=True).reset_index(level=0)
Out[80]: 
        name  weight
age                 
45   Bertram      65
75    Donald      85
21      Hugo      75
3
Wen-Ben

Votre DataFrame df a name (= 'Bertram', 'Donald', 'Hugo') comme index

C'est-à-dire que votre df est:

         age  weight
name                
Bertram   45      65
Donald    75      85
Hugo      21      75

Vous pouvez convertir l'index (name) en une nouvelle colonne dans votre DataFrame df en utilisant la méthode.reset_index()

df.reset_index(inplace=True)

name devient une colonne et le nouvel index est l'index standard par défaut:

Votre df ressemble à ceci maintenant:

Out[1]:    
    name     age  weight

0   Bertram   45      65
1   Donald    75      85
2   Hugo      21      75

Maintenant, vous pouvez changer l'index en age avec la méthode.set_index().

df.set_index('age',inplace=True)

dfis maintenant:

Out[2]: 
     name  weight
age                 
45   Bertram      65
75   Donald       85
21   Hugo         75

Comme le souligne @jezrael ci-dessus, vous pouvez le faire en une seule étape, au lieu de deux, comme ceci:

df = df.reset_index().set_index('age')
1
pink.slash

Le plus bas est le plus efficace car il ajoute le nouvel index age et s’assure qu’il est en place

df.set_index('age',append=True,inplace=True)
0
ricky_hehe