У меня есть фрейм данных с мультииндексом столбца, который мне нужен для среза и выполнения математических операций между срезами.
# sample df
idx=pd.IndexSlice
np.random.seed(123)
tuples = list(zip(*[['one', 'one', 'two', 'two', 'three', 'three'],['foo', 'bar', 'foo', 'bar', 'foo', 'bar']]))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 6), index=['A', 'B', 'C'], columns=index)
Если бы я хотел выполнить, скажем, сложение / вычитание между отдельными столбцами, я мог бы использовать срез индексаи сделайте это так:
df.loc[:,idx['three','foo']] - df.loc[:,idx['two','foo']]
Однако, если я хочу использовать срез более высокого уровня, он не работает и возвращает NaN:
# not working
df.loc[:,idx['three',:]] - df.loc[:,idx['two',:]]
Есть ли простой способ использованиясрезы более высокого уровня df и добавить / вычесть только соответствующие столбцы?Мой фрейм данных потенциально содержит сотни столбцов в мультииндексах.Спасибо