Skip to content

Commit e6512d9

Browse files
itholicHyukjinKwon
authored andcommitted
Implement from_product() for MultiIndex (#1144)
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.MultiIndex.from_product.html#pandas.MultiIndex.from_product ```python >>> numbers = [0, 1, 2] >>> colors = ['green', 'purple'] >>> ks.MultiIndex.from_product([numbers, colors], ... names=['number', 'color']) MultiIndex([(0, 'green'), (0, 'purple'), (1, 'green'), (1, 'purple'), (2, 'green'), (2, 'purple')], names=['number', 'color']) ```
1 parent 5e9387c commit e6512d9

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

databricks/koalas/indexes.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,6 +1073,48 @@ def from_arrays(arrays, sortorder=None, names=None):
10731073
arrays=arrays, sortorder=sortorder, names=names
10741074
)).index
10751075

1076+
@staticmethod
1077+
def from_product(iterables, sortorder=None, names=None):
1078+
"""
1079+
Make a MultiIndex from the cartesian product of multiple iterables.
1080+
1081+
Parameters
1082+
----------
1083+
iterables : list / sequence of iterables
1084+
Each iterable has unique labels for each level of the index.
1085+
sortorder : int or None
1086+
Level of sortedness (must be lexicographically sorted by that
1087+
level).
1088+
names : list / sequence of str, optional
1089+
Names for the levels in the index.
1090+
1091+
Returns
1092+
-------
1093+
index : MultiIndex
1094+
1095+
See Also
1096+
--------
1097+
MultiIndex.from_arrays : Convert list of arrays to MultiIndex.
1098+
MultiIndex.from_tuples : Convert list of tuples to MultiIndex.
1099+
1100+
Examples
1101+
--------
1102+
>>> numbers = [0, 1, 2]
1103+
>>> colors = ['green', 'purple']
1104+
>>> ks.MultiIndex.from_product([numbers, colors],
1105+
... names=['number', 'color']) # doctest: +SKIP
1106+
MultiIndex([(0, 'green'),
1107+
(0, 'purple'),
1108+
(1, 'green'),
1109+
(1, 'purple'),
1110+
(2, 'green'),
1111+
(2, 'purple')],
1112+
names=['number', 'color'])
1113+
"""
1114+
return DataFrame(index=pd.MultiIndex.from_product(
1115+
iterables=iterables, sortorder=sortorder, names=names
1116+
)).index
1117+
10761118
@property
10771119
def name(self) -> str:
10781120
raise PandasNotImplementedError(class_name='pd.MultiIndex', property_name='name')

databricks/koalas/tests/test_indexes.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,3 +427,10 @@ def test_multiindex_rename(self):
427427
pidx = pidx.rename(['my', 'name', 'is'])
428428
kidx = kidx.rename(['my', 'name', 'is'])
429429
self.assert_eq(pidx, kidx)
430+
431+
def test_multiindex_from_product(self):
432+
iterables = [[0, 1, 2], ['green', 'purple']]
433+
pidx = pd.MultiIndex.from_product(iterables)
434+
kidx = ks.MultiIndex.from_product(iterables)
435+
436+
self.assert_eq(pidx, kidx)

docs/source/reference/indexing.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ MultiIndex Constructors
120120

121121
MultiIndex.from_arrays
122122
MultiIndex.from_tuples
123+
MultiIndex.from_product
123124

124125
MultiIndex Properties
125126
~~~~~~~~~~~~~~~~~~~~~

0 commit comments

Comments
 (0)