Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions databricks/koalas/indexes.py
Original file line number Diff line number Diff line change
Expand Up @@ -1001,6 +1001,48 @@ def from_arrays(arrays, sortorder=None, names=None):
arrays=arrays, sortorder=sortorder, names=names
)).index

@staticmethod
def from_product(iterables, sortorder=None, names=None):
"""
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.

Examples
--------
>>> numbers = [0, 1, 2]
>>> colors = ['green', 'purple']
>>> ks.MultiIndex.from_product([numbers, colors],
... names=['number', 'color']) # doctest: +SKIP
MultiIndex([(0, 'green'),
(0, 'purple'),
(1, 'green'),
(1, 'purple'),
(2, 'green'),
(2, 'purple')],
names=['number', 'color'])
"""
return DataFrame(index=pd.MultiIndex.from_product(
iterables=iterables, sortorder=sortorder, names=names
)).index

@property
def name(self) -> str:
raise PandasNotImplementedError(class_name='pd.MultiIndex', property_name='name')
Expand Down
7 changes: 7 additions & 0 deletions databricks/koalas/tests/test_indexes.py
Original file line number Diff line number Diff line change
Expand Up @@ -405,3 +405,10 @@ def test_multiindex_rename(self):
pidx = pidx.rename(['my', 'name', 'is'])
kidx = kidx.rename(['my', 'name', 'is'])
self.assert_eq(pidx, kidx)

def test_multiindex_from_product(self):
iterables = [[0, 1, 2], ['green', 'purple']]
pidx = pd.MultiIndex.from_product(iterables)
kidx = ks.MultiIndex.from_product(iterables)

self.assert_eq(pidx, kidx)