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'}