wake-up-neo.com

python - Pandas - Dataframe.set_index - So behalten Sie die alte Indexspalte bei

Ich habe diese 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

Ich möchte den Index in die Spalte 'age' ändern:

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

     weight
age        
45       65
75       85
21       75

Der alte Indexspaltenname geht verloren. Gibt es eine Möglichkeit, den Index zu ändern, ohne die ursprüngliche Indexspalte zu verlieren und die alte Spalte wieder als "normale" Spalte zu verwenden, sodass sie so aussieht?

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

Verwenden Sie zuerst reset_index und dann 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

append=True und mit reset_index hinzufügen

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

Ihr DataFrame df enthält name (= 'Bertram', 'Donald', 'Hugo') als Index

Ihre df lautet also:

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

Sie können den Index (name) in eine neue Spalte in Ihrem DataFrame df konvertieren, indem Sie die Methode.reset_index()verwenden. 

df.reset_index(inplace=True)

name wird zu einer Spalte und der neue Index ist der Standard-Ganzzahlindex:

Dein df sieht jetzt so aus:

Out[1]:    
    name     age  weight

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

Jetzt können Sie den Index in age mit der Methode.set_index()ändern.

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

dfist jetzt:

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

Wie @jezrael oben erwähnt, können Sie dies in einem einzigen Schritt anstelle von zwei Schritten wie folgt tun:

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

Das Folgende ist das effizienteste, da es den neuen Index von age anfügt und dessen Inplace sicherstellt

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