Skip to content

Commit

Permalink
FIX-#1806: Resolved error when reverting to Pandas for Multiindex (#2660
Browse files Browse the repository at this point in the history
)

Signed-off-by: Todd Yu <[email protected]>
  • Loading branch information
todd-yu authored Feb 2, 2021
1 parent 5ad5fa3 commit 3e1258f
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 11 deletions.
29 changes: 18 additions & 11 deletions modin/pandas/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1687,30 +1687,37 @@ def reindex(
tolerance=None,
):
axis = self._get_axis_number(axis)
if (
level is not None
or (
(columns is not None or axis == 1)
and self._query_compiler.has_multiindex(axis=1)
)
or (
(index is not None or axis == 0)
and self._query_compiler.has_multiindex()
)
if (columns is not None and self._query_compiler.has_multiindex(axis=1)) or (
index is not None and self._query_compiler.has_multiindex()
):
return self._default_to_pandas(
"reindex",
labels=labels,
index=index,
columns=columns,
axis=axis,
method=method,
copy=copy,
level=level,
fill_value=fill_value,
limit=limit,
tolerance=tolerance,
)
if (
level is not None
or (axis == 1 and self._query_compiler.has_multiindex(axis=1))
or (axis == 0 and self._query_compiler.has_multiindex())
):
return self._default_to_pandas(
"reindex",
labels=labels,
level=level,
method=method,
copy=copy,
axis=axis,
fill_value=fill_value,
limit=limit,
tolerance=tolerance,
)
if axis == 0 and labels is not None:
index = labels
elif labels is not None:
Expand Down
36 changes: 36 additions & 0 deletions modin/pandas/test/dataframe/test_indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,42 @@ def test_reorder_levels():
)


def test_reindex_multiindex():
data1, data2 = np.random.randint(1, 20, (5, 5)), np.random.randint(10, 25, 6)
index = np.array(["AUD", "BRL", "CAD", "EUR", "INR"])
modin_midx = pd.MultiIndex.from_product(
[["Bank_1", "Bank_2"], ["AUD", "CAD", "EUR"]], names=["Bank", "Curency"]
)
pandas_midx = pandas.MultiIndex.from_product(
[["Bank_1", "Bank_2"], ["AUD", "CAD", "EUR"]], names=["Bank", "Curency"]
)
modin_df1, modin_df2 = (
pd.DataFrame(data=data1, index=index, columns=index),
pd.DataFrame(data2, modin_midx),
)
pandas_df1, pandas_df2 = (
pandas.DataFrame(data=data1, index=index, columns=index),
pandas.DataFrame(data2, pandas_midx),
)
modin_df2.columns, pandas_df2.columns = ["Notional"], ["Notional"]
md_midx = pd.MultiIndex.from_product([modin_df2.index.levels[0], modin_df1.index])
pd_midx = pandas.MultiIndex.from_product(
[pandas_df2.index.levels[0], pandas_df1.index]
)
# reindex without axis, index, or columns
modin_result = modin_df1.reindex(md_midx, fill_value=0)
pandas_result = pandas_df1.reindex(pd_midx, fill_value=0)
df_equals(modin_result, pandas_result)
# reindex with only axis
modin_result = modin_df1.reindex(md_midx, fill_value=0, axis=0)
pandas_result = pandas_df1.reindex(pd_midx, fill_value=0, axis=0)
df_equals(modin_result, pandas_result)
# reindex with axis and level
modin_result = modin_df1.reindex(md_midx, fill_value=0, axis=0, level=0)
pandas_result = pandas_df1.reindex(pd_midx, fill_value=0, axis=0, level=0)
df_equals(modin_result, pandas_result)


@pytest.mark.parametrize("data", test_data_values, ids=test_data_keys)
def test_reset_index(data):
modin_df = pd.DataFrame(data)
Expand Down

0 comments on commit 3e1258f

Please sign in to comment.