Выбор строк в Pandas DataFrame на основе условий значений индекса - PullRequest
0 голосов
/ 10 июня 2018

Допустим, у меня есть следующий многоиндексный DataFrame:

import pandas as pd
df = pd.DataFrame({'Index0':[0,1,2,3,4,5],'Index1':[100,200,300,400,500,600],'A':[5,2,5,8,1,2]})

example DataFrame

Теперь я хочу выбрать все строки, где Index1 меньшечем 400. Все знают, как это работает, если Index1 был обычным столбцом:

df[df['Index1'] < 400]

Таким образом, один из методов - reset_index, выполните выбор, а затем снова установите индекс.Это кажется излишним.

Мой вопрос: есть ли способ сделать это напрямую?И как это сделать, когда в DataFrame есть строка multiindex?

1 Ответ

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

Здесь проще всего использовать query:

df1 = df.query('Index1 < 400')
print (df1)
               A
Index0 Index1   
0      100     5
1      200     2
2      300     5

или get_level_values для выбора уровня MultiIndex с boolean indexing:

df1 = df[df.index.get_level_values('Index1') < 400]

Сведения :

print (df.index.get_level_values('Index1'))
Int64Index([100, 200, 300, 400, 500, 600], dtype='int64', name='Index1')

Если уровни не имеют имен, выбираемых по позициям, для запроса используйте специальное ключевое слово ilevel_с позицией:

df.index.names = [None, None]
print (df)
       A
0 100  5
1 200  2
2 300  5
3 400  8
4 500  1
5 600  2

df1 = df.query('ilevel_1 < 400')

df1 = df[df.index.get_level_values(1) < 400]
print (df1)
       A
0 100  5
1 200  2
2 300  5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...