Описание проблемы
У меня есть мульти-индексный фрейм данных pandas со столбцом 'value' как один из столбцов:
index name value
('cat1', 'subcat1') henk 6
('cat2', 'subcat1') klaas 7
('cat3', 'subcat1') jan 10
('cat1', 'subcat2') piet 7
('cat2', 'subcat2') joris 8
('cat3', 'subcat2') corneel 9
Я хочу выбрать все строки r с индексом (index0, index1), где выполняется следующее:
r['value'] > ref['value']
Где ref имеет тот же первый индекс, что и r, и 'subcat1' как второй индекс:
r.index0 == ref.index0 AND ref.index1 == 'subcat1'
Это приведет к:
index name value
('cat1', 'subcat2') piet 7
('cat2', 'subcat2') joris 8
Короче говоря, как я могу сравнить значения строк на основе его собственного многоуровневого индекса.
Код, который у меня есть до сих пор
Пока у меня есть код для выбора значений, больших, чем ссылочный индекс, но только с полным индексом
import pandas as pd
indices = [['cat1','cat2','cat3','cat1','cat2','cat3'],['subcat1','subcat1','subcat1','subcat2','subcat2','subcat2']]
df = pd.DataFrame([
{'value' : 6,'name' : 'henk'},
{'value' : 7,'name' : 'klaas'},
{'value' : 10,'name' : 'jan'},
{'value' : 7,'name' : 'piet'},
{'value' : 8,'name' : 'joris'},
{'value' : 9,'name' : 'corneel'},
],index=indices)
result = df[(df['value'] > df.loc[('cat1','subcat1')]['value'])]
Отсутствует в этом коде
Значения сравниваются с фиксированной индексной строкой вместо выбора ссылочной строки на основе части ее собственного индекса