Pandas: obtienes nivel multiindex como serie.

Tengo un dataframe con varios niveles, por ejemplo:

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 

Quiero crear una nueva columna usando el nivel de índice titulado second , para que pueda obtener

  AB first second foo five 12 five four 11 four bar one 16 one five 12 five three 11 three 

Puedo hacer esto restableciendo el índice, copiando la columna, y luego volviendo a aplicar, pero eso parece más completo.

Intenté df.index.levels[1] , pero eso crea una lista ordenada, no conserva el orden.

Si fuera un solo índice, usaría df.index pero en un multiindex que crea una columna de tuplas.

Si esto se resuelve en otro lugar, por favor comparta, ya que no he tenido la suerte de buscar los archivos de stackoverflow.

 df['B'] = df.index.get_level_values(level=1) # Zero based indexing. # df['B'] = df.index.get_level_values(level='second') # This also works. >>> df AB first second foo one 12 one two 11 two bar one 16 one two 12 two three 11 three 
 df['B'] = idx.to_series().str[1]