Pandas multiindex: получить значения уровня без дубликатов - PullRequest
0 голосов
/ 08 июня 2018

Так что я уверен, что это довольно тривиально, но я довольно плохо знаком с python / pandas.

Я хочу получить определенный столбец (Имена моих измерений) моего Multiindex в виде списка для использования.это в цикле позже, чтобы назвать и сохранить мои графики.Я довольно уверен в получении нужных мне данных из моего фрейма данных, но я не могу понять, как получить определенные столбцы из моего индекса.

Так что на самом деле, когда я писал вопрос, я вроде нашел ответ, ноэто все еще кажется немного неуклюжим.Для этого должна быть прямая команда.Это был бы мой код:

a = df.index.get_level_values('File')
a = a.drop_duplicates()
a = a.values

1 Ответ

0 голосов
/ 08 июня 2018

index.levels

Вы можете получить доступ к уникальным элементам каждого уровня вашего MultiIndex напрямую:

df = pd.DataFrame([['A', 'W', 1], ['B', 'X', 2], ['C', 'Y', 3],
                   ['D', 'X', 4], ['E', 'Y', 5]])
df = df.set_index([0, 1])

a = df.index.levels[1]

print(a)
Index(['W', 'X', 'Y'], dtype='object', name=1)

Чтобы понять доступную информацию, посмотрите, как выглядит объект Indexхранится внутри:

print(df.index)

MultiIndex(levels=[['A', 'B', 'C', 'D', 'E'], ['W', 'X', 'Y']],
           labels=[[0, 1, 2, 3, 4], [0, 1, 2, 1, 2]],
           names=[0, 1])

Однако приведенные ниже методы более интуитивно понятны и лучше документированы.

Стоит отметить, что вам не нужно явно извлекать массив NumPy через values атрибут.Вы можете перебирать Index объекты напрямую.Кроме того, цепочка методов возможна и приветствуется с помощью Pandas.

drop_duplicates / unique

Возвращает объект Index с сохранением порядка.

a = df.index.get_level_values(1).drop_duplicates()
# equivalently, df.index.get_level_values(1).unique()

print(a)
Index(['W', 'X', 'Y'], dtype='object', name=1)

set

Возвращает set.Полезно для поиска O (1), но результат неупорядочен.

a = set(df.index.get_level_values(1))

print(a)
{'X', 'Y', 'W'}
...