Mam dataframe z wieloma poziomami, npPandy: uzyskać poziom multiindex jak seria
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
Chcę utworzyć nową kolumnę używając poziom indeksu pt second
, tak aby uzyskać
A B
first second
foo five 12 five
four 11 four
bar one 16 one
five 12 five
three 11 three
Mogę to zrobić, resetując indeks, kopiując kolumnę, a następnie ponownie aplikując, ale to wydaje się bardziej okrągłe.
Próbowałem df.index.levels[1]
, ale to tworzy posortowaną listę, nie zachowuje zamówienia.
Jeśli był to pojedynczy indeks, użyłbym df.index
, ale w multiindeksie, który tworzy kolumnę krotek.
Jeśli zostanie to rozwiązane w innym miejscu, proszę udostępnić, ponieważ nie miałem szczęścia szukając archiwów stackoverflow.
jest to możliwe do zrobienia wg nazwy indeksu? –
Tak. 'df.index.get_level_values (level = 'second')' również działa. – Alexander
Możesz zrobić to samo, jeśli multiindeks znajduje się nad kolumnami, a nie w indeksie, używając 'df.columns.get_level_values (level = 1)'. –