Как получить доступ к строкам в многоиндексном фрейме данных с помощью индексирования на основе целых чисел

#python #pandas #indexing

Вопрос:

Предположим, у меня есть следующий многоиндексный фрейм данных под названием df :

 arrays = [["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],  ["one", "two", "one", "two", "one", "two", "one", "two"],] tuples = list(zip(*arrays))  index = pd.MultiIndex.from_tuples(tuples, names=["first", "second"])  df = pd.Series(np.random.randn(8), index=index)  

Если бы я хотел получить доступ ко всем строкам , связанным baz , например, с, я бы использовал поперечное сечение: df.xs(('baz')) .

Но есть ли способ получить доступ к строкам, ссылаясь на целочисленное расположение на первом уровне, аналогично фреймам данных iloc с одним индексом? В моем примере, я думаю, это будет расположение индекса 1.

Я попытался это сделать с помощью обходного пути, используя .loc следующее:

(df.loc[[df.index.get_level_values(0)[1]]]

Но это возвращает первую группу строк, связанных с bar . Что, я полагаю, связано с тем, что целое число-местоположение 1 все еще находится внутри bar . Мне пришлось бы сослаться на 2, чтобы добраться до baz .

Могу ли я сделать так, чтобы расположение 0, 1, 2 и 3 указывало на строку, базу, foo и qux соответственно?

Ответ №1:

Вы можете использовать levels

 df.xs(df.index.levels[0][1]) second one -1.052578 two 0.565691 dtype: float64  

Более подробная информация

 df.index.levels[0][0] 'bar' df.index.levels[0][1] 'baz'