Pandas мультииндексная логическая индексация

Итак, учитывая мультииндексированный фрейм данных, я хотел бы возвращать только строки, которые удовлетворяют условию для всех уровней нижнего индекса в мультииндексе. Вот небольшой рабочий пример:

df = pd.DataFrame({'a': [1, 1, 2, 2], 'b': [1, 2, 3, 4], 'c': [0, 2, 2, 2]})
df = df.set_index(['a', 'b'])

print(df)

вне:

     c
a b   
1 1  0
  2  2
2 3  2
  4  2

Теперь я хотел бы вернуть записи, для которых c > 1. Например, я хотел бы сделать что-то вроде

df[df[c > 1]]

вне:

     c
a b   
1 2  2
2 3  2
  4  2

Но я хочу получить

вне:

     c
a b   
2 3  2
  4  2

Любые мысли о том, как сделать это наиболее эффективным способом?


person pdevar    schedule 20.10.2015    source источник
comment
Вы имеете в виду c›1 и a=2?   -  person Zero    schedule 20.10.2015
comment
Да, но я не хочу указывать a == 2. Это просто игрушечный пример.   -  person pdevar    schedule 20.10.2015
comment
Можете ли вы уточнить, что вы спрашиваете? Я не понимаю, почему то, что вы просите, не соответствует тому, что вы получаете с df[df[c > 1]]?   -  person ako    schedule 21.10.2015
comment
Я хочу, чтобы индекс a доминировал, поэтому, если какая-либо из записей с уникальным значением a, в данном случае a==2, имеет соответствующее значение c, такое что c>1, тогда удаляются все записи, связанные с этим значением индекса a. Итак, что-то вроде `df[df[c › 1 for all a == x] for all x in a] .   -  person pdevar    schedule 21.10.2015


Ответы (1)


В итоге я использовал groupby:

df.groupby(level=0).filter(lambda x: all([c > 1 for v in x['c']]))
person pdevar    schedule 21.10.2015