熊猫dataframe.set_index()删除先前的索引和列

时间:2018-07-17 04:26:46

标签: python pandas dataframe indexing

当使用DataFrame.set_index('some_index')设置索引时,我刚刚遇到了Pandas DataFrames的一个奇怪现象,该旧列也被删除了!这是一个示例:

import pandas as pd
df = pd.DataFrame({'month': [1, 4, 7, 10],'year': [2012, 2014, 2013, 2014],'sale':[55, 40, 84, 31]})
df_mn=df.set_index('month')
>>> df_mn
       sale  year
month            
1        55  2012
4        40  2014
7        84  2013
10       31  2014

现在我将索引更改为年份:

df_mn.set_index('year')
      sale
year      
2012    55
2014    40
2013    84
2014    31

..,并且月份列已与索引一起删除。这很令人讨厌,因为我只想交换DataFrame索引。

是否有一种方法可以使之前作为索引的列不被删除?也许通过类似这样的方式:DataFrame.set_index('new_index',delete_previous_index = False)

谢谢您的建议

3 个答案:

答案 0 :(得分:2)

您可以执行以下操作

>>> df_mn.reset_index().set_index('year')
      month  sale
year             
2012      1    55
2014      4    40
2013      7    84
2014     10    31

答案 1 :(得分:0)

  

否,在这种情况下,您必须保存上一列,如所示   下方:

import pandas as pd
df = pd.DataFrame({'month': [1, 4, 7, 10],'year': [2012, 2014, 2013, 2014],'sale':[55, 40, 84, 31]})
df_mn=df.set_index('month')
df_mn['month'] = df_mn.index #Save it as another column, and then run set_index with year column as value.
df_mn.set_index('year')

除了使用重复的数据帧df_mn之外,因此数据帧df保持不变,您可以再次使用它。 另外,如果您未设置

  将set_index的

inplace 参数设置为 True

即使您调用set_index(),df_mn也不会更改。

此外,像其他答案一样,您始终可以使用reset_index()。

答案 2 :(得分:-1)

我发现获得前几列的解决方案是将drop = False设置为 dataframe.set_index('some_column',drop = False)。这不是一个完美的答案,但可以!