Вы действительно можете создать мультииндекс:
In [1]: import pandas as pd
...: import numpy as np
In [2]: arrays = [['Cat','Dog','Rabbit']*3,
...: ['Cat']*3+['Dog']*3+['Rabbit']*3]
In [3]: tuples = list(zip(*arrays))
In [4]: index = pd.MultiIndex.from_tuples(tuples, names=['Predicted class', 'Actual class'])
In [5]: index
Out[5]:
MultiIndex(levels=[['Cat', 'Dog', 'Rabbit'], ['Cat', 'Dog', 'Rabbit']],
labels=[[0, 1, 2, 0, 1, 2, 0, 1, 2], [0, 0, 0, 1, 1, 1, 2, 2, 2]],
names=['Predicted class', 'Actual class'])
In [6]: numbers = [5,3,0,2,3,1,0,2,11]
In [7]: data = pd.Series(numbers, index=index)
In [8]: df = pd.DataFrame(data.unstack('Actual class'))
In [9]: df
Out[9]:
Actual class Cat Dog Rabbit
Predicted class
Cat 5 2 0
Dog 3 3 2
Rabbit 0 1 11