How to convert pandas index in a dataframe to a column?

匿名 (未验证) 提交于 2019-12-03 02:44:02

问题:

This seems rather obvious, but I can't seem to figure out how do I convert an index of data frame to a column?

For example:

df=            gi  ptt_loc  0  384444683      593    1  384444684      594   2  384444686      596   

To,

df=     index1       gi    ptt_loc  0  0     384444683      593    1  1     384444684      594   2  2     384444686      596   

回答1:

either:

df['index1'] = df.index 

or, .reset_index:

df.reset_index(level=0, inplace=True) 

so, if you have a multi-index frame with 3 levels of index, like:

>>> df                        val tick       tag obs         2016-02-26 C   2    0.0139 2016-02-27 A   2    0.5577 2016-02-28 C   6    0.0303 

and you want to convert the 1st (tick) and 3rd (obs) levels in the index into columns, you would do:

>>> df.reset_index(level=['tick', 'obs'])           tick  obs     val tag                         C   2016-02-26    2  0.0139 A   2016-02-27    2  0.5577 C   2016-02-28    6  0.0303 


回答2:

For MultiIndex you can extract its subindex using

df['si_name'] = R.index.get_level_values('si_name')  

where si_name is the name of the subindex.



回答3:

To provide a bit more clarity, let's look at a DataFrame with two levels in its index (a MultiIndex).

index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'],                                      ['North', 'South']],                                     names=['State', 'Direction'])  df = pd.DataFrame(index=index,                    data=np.random.randint(0, 10, (6,4)),                    columns=list('abcd')) 

The reset_index method, called with the default parameters, converts all index levels to columns and uses a simple RangeIndex as new index.

df.reset_index() 

Use the level parameter to control which index levels are converted into columns. If possible, use the level name, which is more explicit. If there are no level names, you can refer to each level by its integer location, which begin at 0 from the outside. You can use a scalar value here or a list of all the indexes you would like to reset.

df.reset_index(level='State') # same as df.reset_index(level=0) 

In the rare event that you want to preserve the index and turn the index into a column, you can do the following:

# for a single level df.assign(State=df.index.get_level_values('State'))  # for all levels df.assign(**df.index.to_frame()) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!