当使用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)
谢谢您的建议
答案 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)。这不是一个完美的答案,但可以!