Получение имен второго уровня мультииндексного фрейма данных - PullRequest
0 голосов
/ 14 мая 2018

У меня есть MultiIndex DataFrame в форме:

df
                0         1         2         3
Open  1  1.046031 -1.653869  1.039417  0.029429
      2  0.149056 -1.572694  0.562478 -0.974489
Close 1 -0.475074 -0.052126 -2.124979 -1.918538
      1  0.862663  0.405697  0.455616 -0.542472

Я могу получить данные первого уровня, например, такие как:

df2 = df.xs('Open', level=0, drop_level=False)

               0         1         2         3
Open 1  1.046031 -1.653869  1.039417  0.029429
     2  0.149056 -1.572694  0.562478 -0.974489

.Есть ли способ получить имена второго уровня (например, 1, 2 и т. Д.) Из вышеупомянутого обрезанного кадра данных (df2), или я должен знать их заранее, чтобы вызвать что-то вроде:

df2.loc[idx['Open', '1'], :]

Чтобы было понятно, я знаю имена уровня 0 ('Open', 'Close'), но игнорирую второй уровень.Есть ли способ получить их, чтобы использовать их в приведенном выше синтаксисе?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Я думаю, что сначала нужно MultiIndex.remove_unused_levels, а затем получить значения уровня:

print (df2.index.remove_unused_levels().levels[1])
Int64Index([1, 2], dtype='int64')

Или:

print (df2.index.remove_unused_levels().get_level_values(1))
Int64Index([1, 2], dtype='int64')

Лучше увидеть разницу, если выбрать второй Close уровень:

df22 = df.xs('Close', level=0, drop_level=False)
print (df22)
                0         1         2         3
Close 1 -0.475074 -0.052126 -2.124979 -1.918538
      1  0.862663  0.405697  0.455616 -0.542472

#get default index values - not what need
print (list(df22.index.levels[1]))
[1, 2]

#get unique values without all levels
print (df22.index.remove_unused_levels().levels[1])
Int64Index([1], dtype='int64')

#get values if index
print (df22.index.remove_unused_levels().get_level_values(1))
Int64Index([1, 1], dtype='int64')
0 голосов
/ 14 мая 2018

Вы можете применить индексную функцию к вашему фрейму данных. Это дает вам уровни и метки. Если вы хотите получить имена 2-го уровня:

list(df.index.levels[1])

['1', '2']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...