Вам необходимо пройти все уровни MultiIndex
как кортеж.Таким образом, правильный формат должен быть:
df.set_index([('foo', 'one'), ('foo', 'two'), ('foo', 'three')])
Если это громоздко, вы можете создать свой индекс, используя представление списка, например:
idx = [x for x in df.columns if x[0] == 'foo']
print(idx)
# [('foo', 'one'), ('foo', 'two'), ('foo', 'three')]
df.set_index(idx)
[out]
bar
one two three
(foo, one) (foo, two) (foo, three)
1 3 4 4 8 3
5 1 0 4 7 5
0 0 3 9 1 6