Multi-índices por producto cartesiano de arrays

El tercer método nos permite especificar los valores (únicos) de los diferentes niveles, creándose el índice jerárquico como resultado del producto escalar de los valores. Por ejemplo:

index = pd.MultiIndex.from_product(
    [
        [2018, 2019],
        ["Spain", "Portugal", "France"]
    ],
    names = ["Year", "Country"]
)
index

MultiIndex([(2018,    'Spain'),
            (2018, 'Portugal'),
            (2018,   'France'),
            (2019,    'Spain'),
            (2019, 'Portugal'),
            (2019,   'France')],
           names=['Year', 'Country'])

Nuevamente, el parámetro names nos permite dar nombre a los niveles.

El resultado de llevar este índice a nuestro DataFrame es el ya conocido:

data = pd.DataFrame(data = [18, 20, 10, 15, 12, 18], index = index, columns = ["Sales"])
data

DataFrame con multi-índice