Как нарезать MultiIndex и столбец?

1
midx = pd.MultiIndex(levels=[['zero', 'one'], ['x', 'y']],labels = [[1, 1, 0, 0],[1, 0, 1, 0]])
        df = pd.DataFrame(np.random.randn(4, 2), index=midx)

>>midx
               0         1
one  y  0.477304  0.247328
     x -1.267339 -1.779735
zero y  0.812613  1.119952
     x  0.092788  0.384020

Более читаемый способ сделать это? попробовали df.loc ['one', 1] не повезло..

df.xs('one')[1]
Out[44]: 
y    0.247328
x   -1.779735
Теги:
pandas

2 ответа

1

IIUC:

In [74]: df.loc['one', 1]
Out[74]:
y    0.247328
x   -1.779735
Name: 1, dtype: float64

или более явно:

In [80]: df.loc[pd.IndexSlice['one', :], 1]
Out[80]:
one  y    0.247328
     x   -1.779735
Name: 1, dtype: float64
  • 0
    Не могли бы вы исправить проблемы с форматированием в вопросе. Я не могу этого сделать, потому что у меня еще недостаточно репутации.
  • 0
    @ 0xdb, конечно, готово :)
Показать ещё 2 комментария
0

В качестве альтернативы pd.IndexSlice вы можете использовать pd.DataFrame.query и выбрать свой столбец на отдельном шаге:

res = df.query('ilevel_0 == "one"').loc[:, 1]

Согласно документам, ilevel_0 используется для представления первого неназванного индекса. Для ясности вы можете заменить это на подлинное имя, если вы определили его как таковой, когда вы создаете dataframe.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню