python - Pandas - Dataframe.set_index - 如何保留旧索引列

时间:2018-04-08 17:24:24

标签: python python-3.x pandas

我有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

我想将索引更改为列'age'

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

     weight
age        
45       65
75       85
21       75

旧索引列名称丢失。有没有办法在不丢失原始索引列的情况下更改索引并再次将旧列作为“普通”列,以便它看起来像这样?

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

5 个答案:

答案 0 :(得分:10)

先使用reset_index,然后使用set_index

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

答案 1 :(得分:3)

添加append=Truereset_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

答案 2 :(得分:1)

您的DataFrame df具有name(= 'Bertram', 'Donald', 'Hugo')作为索引

也就是说,您的df是:

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

您可以使用 name 方法将索引(df)转换为DataFrame .reset_index()内部的新列。

df.reset_index(inplace=True)

name成为一列,新索引是标准的默认整数索引:

您的df现在看起来像这样:

Out[1]:    
    name     age  weight

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

现在,您可以使用 age 方法将索引更改为.set_index()

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

df现在是

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

正如上面的 @jezrael 所指出的,您可以一步完成此操作,而不是像这样的两个步骤:

df = df.reset_index().set_index('age')

答案 3 :(得分:0)

以下是最有效的方法,因为它附加了age的新索引并确保其在适当位置

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

答案 4 :(得分:0)

将drop变量更改为False。

other.transform.position