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