Python 熊猫:获取多索引级别为系列

Python 熊猫:获取多索引级别为系列,python,pandas,multi-index,Python,Pandas,Multi Index,我有一个具有多个级别的数据帧,例如: idx = pd.MultiIndex.from_product((['foo', 'bar'], ['one', 'five', 'three' 'four']), names=['first', 'second']) df = pd.DataFrame({'A': [np.nan, 12, np.nan, 11, 16, 12, 11, np.nan]}, index=idx).dropn

我有一个具有多个级别的数据帧,例如:

idx = pd.MultiIndex.from_product((['foo', 'bar'], ['one', 'five', 'three' 'four']),
                                 names=['first', 'second'])
df = pd.DataFrame({'A': [np.nan, 12, np.nan, 11, 16, 12, 11, np.nan]}, index=idx).dropna().astype(int)

              A     
first second
foo   five     12
      four     11
bar   one      16
      five     12
      three    11
我想使用名为
second
的索引级别创建一个新列,以便

              A    B  
first second
foo   five     12   five
      four     11   four
bar   one      16   one
      five     12   five
      three    11   three
我可以通过重置索引、复制列,然后重新应用来实现这一点,但这似乎更全面

我尝试了
df.index.levels[1]
,但这会创建一个排序列表,它不会保留顺序

如果它是单个索引,我将使用
df.index
,但在创建元组列的多索引中使用


如果在其他地方解决了此问题,请与我们分享,因为我在搜索stackoverflow归档文件时没有任何运气。

如果您想使用索引名(而不是数字索引)获取索引列值,我可以借用@AlbertoGarcia Raboso的答案

df['B'] = idx.to_series().str[1]
请注意,这会给您一个仍然包含索引列的输出,正如问题所要求的,它是一个系列。这看起来像是一个重复的列

df.index.to_frame()['second']

(例如,用
df.index.to_frame()['second'][8]
询问第9个系列项目)

是否可以按索引名执行?是的
df.index.get_level_values(level='second')
也可以工作。如果多索引位于列之上,而不是使用
df.columns.get_level_values(level=1)
的索引之上,则可以执行相同的操作。
df.index.to_frame()['second']