Python Pandas:使用DataFrame.set_index时如何保留原索引列
如何在更改DataFrame索引时保留原索引列
嘿,这个问题我之前也碰到过!当你直接用set_index('age')替换索引时,原索引name确实会被丢弃,不过有几种简单的方法可以让你既设置新索引,又保留原索引作为普通列:
方法一:先重置索引为列,再设置新索引
这是最直观的方式,先把原索引转换成DataFrame的普通列,再指定新的索引:
import pandas as pd # 你的初始DataFrame创建代码 df = pd.DataFrame({'Hugo' : {'age' : 21, 'weight' : 75}, 'Bertram': {'age' : 45, 'weight' : 65}, 'Donald' : {'age' : 75, 'weight' : 85}}).T df.index.names = ['name'] # 步骤1:将原索引转为普通列 df.reset_index(inplace=True) # 步骤2:设置age为新索引 df.set_index('age', inplace=True)
执行后你的DataFrame会变成:
name weight age 21 Hugo 75 45 Bertram 65 75 Donald 85
方法二:先复制索引到新列,再设置新索引
如果你不想先重置索引,也可以直接把原索引的值赋值给一个新列,再设置新索引:
# 给DataFrame新增name列,值为原索引 df['name'] = df.index # 设置age为索引 df.set_index('age', inplace=True)
得到的结果和方法一完全一致。
额外提示:避免修改原DataFrame
如果你不想改变原始的DataFrame,可以用链式操作生成新的DataFrame:
df_new = df.reset_index().set_index('age')
这样原df会保持初始状态,df_new就是你需要的结果啦~
内容的提问来源于stack exchange,提问作者Egirus Ornila
相关产品推荐
相关产品推荐

