Подмножественные многоиндексные панды с комбинацией метки и логического типа - PullRequest
0 голосов
/ 20 сентября 2019

Учитывая мультииндексный фрейм данных, как выбрать все строки, относящиеся к одной метке индекса и имеющие определенное значение в столбце?

Вот пример фрейма данных:

import pandas as pd

index = pd.MultiIndex.from_product([['xy1','xy2','xy3'], ['1','2','3','4','5']], names=['Tag', 'Page'])
df = pd.DataFrame([1,1,1,4,5,1,1,61,4,51,1,1,4,5,1], index, columns=['Value'])
df

Из него я хотел бы выбрать все строки с меткой xy1 , которые в столбце Значение имеют 1. Следовательно, получая это:

index2 = pd.MultiIndex.from_product([['1','2','3']], names=['Page'])
df2 = pd.DataFrame([1,1,1], index2, columns=['Value'])
df2

Какя могу добиться этого элегантным способом?

1 Ответ

1 голос
/ 20 сентября 2019

Используйте DataFrame.query и удалите первый уровень с помощью DataFrame.reset_index:

df1 = df.query("Tag == 'xy1' & Value == 1").reset_index(level=0, drop=True)

Или сначала выберите по первому уровню с помощью DataFrame.xs, а затем фильтр по столбцу Value:

df1 = df.xs('xy1').query("Value == 1")
print (df1)
      Value
Page       
1         1
2         1
3         1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...