Я использовал настройки со страницы многоиндексных панд:
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.DataFrame(np.random.randn(8, 4), index=arrays)
print(s)
output s:
0 1 2 3
bar one -2.252251 -0.655827 1.463011 -0.028378
two 0.764846 0.245175 -0.580668 -1.054938
baz one 1.052068 -0.024946 0.435709 0.067140
two 0.397881 0.658192 -1.178750 -0.137875
foo one 0.168246 0.391718 1.001085 -0.353019
two -0.034458 -1.182889 0.207794 0.275627
qux one -1.236448 0.258419 0.999734 -0.774948
two -0.518770 1.954563 -1.627627 0.436150
0, 1, 2, 3 будет вашим "Z"
Итак, скажем, я хотел получить доступ к каждой из строк, где второй индекс равен единице, мы можем использовать df.xs ():
s.xs('one', level=1)+1
возвращает (мы добавили 1 в каждый столбец, гдеsecond index = 'one'):
0 1 2 3
bar -1.252251 0.344173 2.463011 0.971622
baz 2.052068 0.975054 1.435709 1.067140
foo 1.168246 1.391718 2.001085 0.646981
qux -0.236448 1.258419 1.999734 0.225052
Теперь скажите, что я хотел получить доступ к обоим вторым индексам, где первый индекс = 'bar', и возвести в квадрат это значение:
s.xs('bar', level=0)**2
возвращает квадратзначения индекса 'bar' для второго индекса 'one' и 'two':
0 1 2 3
one 5.072636 0.430109 2.140401 0.000805
two 0.584989 0.060111 0.337175 1.112894
Level = 0 соответствует вашему 'X', level = 1 соответствует вашему 'Y', а значения соответствуютк вашему «Z».Надеюсь, это поможет!