@classmethod<EOL><INDENT>def from_product(cls, iterables, sortorder=None, names=None):<DEDENT>
from pandas.core.arrays.categorical import _factorize_from_iterables<EOL>from pandas.core.reshape.util import cartesian_product<EOL>if not is_list_like(iterables):<EOL><INDENT>raise TypeError("<STR_LIT>")<EOL><DEDENT>elif is_iterator(iterables):<EOL><INDENT>iterables = list(iterables)<EOL><DEDENT>codes, levels = _factorize_from_iterables(iterables)<EOL>codes = cartesian_product(codes)<EOL>return MultiIndex(levels, codes, sortorder=sortorder, names=names)<EOL>
Make a MultiIndex from the cartesian product of multiple iterables.

Parameters
----------
iterables : list / sequence of iterables
    Each iterable has unique labels for each level of the index.
sortorder : int or None
    Level of sortedness (must be lexicographically sorted by that
    level).
names : list / sequence of str, optional
    Names for the levels in the index.

Returns
-------
index : MultiIndex

See Also
--------
MultiIndex.from_arrays : Convert list of arrays to MultiIndex.
MultiIndex.from_tuples : Convert list of tuples to MultiIndex.
MultiIndex.from_frame : Make a MultiIndex from a DataFrame.

Examples
--------
>>> numbers = [0, 1, 2]
>>> colors = ['green', 'purple']
>>> pd.MultiIndex.from_product([numbers, colors],
...                            names=['number', 'color'])
MultiIndex(levels=[[0, 1, 2], ['green', 'purple']],
           codes=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]],
           names=['number', 'color'])