我有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
答案 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=True
和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
答案 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