如何将数据框中的pandas索引转换为列?
这似乎相当明显,但我似乎无法弄清楚如何将数据框架的索引转换为列?
例如:
df= gi ptt_loc 0 384444683 593 1 384444684 594 2 384444686 596
至,
df= index1 gi ptt_loc 0 0 384444683 593 1 1 384444684 594 2 2 384444686 596
之一:
df['index1'] = df.index
或者.reset_index
:
df.reset_index(level=0, inplace=True)
所以,如果你有一个索引为3级的多索引框架,比如:
>>> 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
并且您想要将索引中的第一( tick
)和第三( obs
)级别转换为列,您应该这样做:
>>> 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
对于MultiIndex,您可以使用提取其子索引
df['si_name'] = R.index.get_level_values('si_name')
其中si_name
是子索引的名称。
为了更清楚一点,我们来看一下在索引中有两个级别的DataFrame(一个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'))
使用默认参数调用的reset_index
方法将所有索引级别转换为列,并使用简单的RangeIndex
作为新索引。
df.reset_index()
使用level
参数来控制将哪些索引级别转换为列。 如果可能的话,使用更明确的级别名称。 如果没有级别名称,则可以通过其整数位置来引用每个级别,该位置从外部开始为0。 您可以在这里使用标量值或者您想要重置的所有索引列表。
df.reset_index(level='State') # same as df.reset_index(level=0)
在极less数情况下,要保留索引并将索引转换为列,可以执行以下操作:
# for a single level df.assign(State=df.index.get_level_values('State')) # for all levels df.assign(**df.index.to_frame())