如何控制从pandas df.reset_index()获得的标题的标题标题两次

时间:2017-12-11 11:03:32

标签: python python-2.7 pandas indexing

我在代码中执行df.reset_index()两次。第一次重置为我提供了一个带有' index'的新列。作为标题中的标题。我能改变一下吗?

aaa = df.reset_index().melt(['prot', iso_head,'index'], mz_header)

           prot    isoab0  index   variable       value
39   ALBU_HUMAN  0.508396     39  [M+2H+]2+  593.284410
669  ALBU_HUMAN  0.508396     39  [M+3H+]3+  395.858700
670  ALBU_HUMAN  0.504033     40  [M+3H+]3+  399.201120

因为当我df.reset_index()进行第二轮(.dropna()之后)时,第一列的实际索引会更改为'level_0'列。 '指数'列仍然如上所述。新的重置索引列位于第一列。这非常令人困惑。为什么.reset_index()这次没有为我提供标题为' index'的新列。喜欢第一轮?管理多个索引列的好方法是什么?放弃其中一些是不是很好?

aaa = aaa.dropna().sort_values('index')
aaa = aaa.reset_index()

    level_0        prot    isoab0  index   variable       value
50       39  ALBU_HUMAN  0.508396     39  [M+2H+]2+  593.284410
51      669  ALBU_HUMAN  0.508396     39  [M+3H+]3+  395.858700
52      670  ALBU_HUMAN  0.504033     40  [M+3H+]3+  399.201120

1 个答案:

答案 0 :(得分:3)

那是因为你已经有一个名为index的列,如果你想要一个替代名称,你可以在重建索引之前使用rename_axis,即

df.rename_axis('INDEX').reset_index()

还使用.name设置索引名称,(谢谢@coldspeed):

df.index.name = 'INDEX'
df.reset_index()

   INDEX        prot    isoab0  index   variable      value
0     39  ALBU_HUMAN  0.508396     39  [M+2H+]2+  593.28441
1    669  ALBU_HUMAN  0.508396     39  [M+3H+]3+  395.85870
2    670  ALBU_HUMAN  0.504033     40  [M+3H+]3+  399.20112