Skip to content

Commit

Permalink
Fix compressed multiindex for output of groupby.rolling (#36152)
Browse files Browse the repository at this point in the history
  • Loading branch information
phofl authored Sep 7, 2020
1 parent b37c9f8 commit ce0476f
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
1 change: 1 addition & 0 deletions doc/source/whatsnew/v1.1.2.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Fixed regressions
- Regression in :meth:`DataFrame.replace` where a ``TypeError`` would be raised when attempting to replace elements of type :class:`Interval` (:issue:`35931`)
- Fix regression in pickle roundtrip of the ``closed`` attribute of :class:`IntervalIndex` (:issue:`35658`)
- Fixed regression in :meth:`DataFrameGroupBy.agg` where a ``ValueError: buffer source array is read-only`` would be raised when the underlying array is read-only (:issue:`36014`)
- Fixed regression in :meth:`Series.groupby.rolling` number of levels of :class:`MultiIndex` in input was compressed to one (:issue:`36018`)
-

.. ---------------------------------------------------------------------------
Expand Down
10 changes: 5 additions & 5 deletions pandas/core/window/rolling.py
Original file line number Diff line number Diff line change
Expand Up @@ -2211,17 +2211,17 @@ def _apply(
# Compose MultiIndex result from grouping levels then rolling level
# Aggregate the MultiIndex data as tuples then the level names
grouped_object_index = self.obj.index
grouped_index_name = [grouped_object_index.name]
grouped_index_name = [*grouped_object_index.names]
groupby_keys = [grouping.name for grouping in self._groupby.grouper._groupings]
result_index_names = groupby_keys + grouped_index_name

result_index_data = []
for key, values in self._groupby.grouper.indices.items():
for value in values:
if not is_list_like(key):
data = [key, grouped_object_index[value]]
else:
data = [*key, grouped_object_index[value]]
data = [
*com.maybe_make_list(key),
*com.maybe_make_list(grouped_object_index[value]),
]
result_index_data.append(tuple(data))

result_index = MultiIndex.from_tuples(
Expand Down
21 changes: 21 additions & 0 deletions pandas/tests/window/test_grouper.py
Original file line number Diff line number Diff line change
Expand Up @@ -372,3 +372,24 @@ def test_groupby_subset_rolling_subset_with_closed(self):
name="column1",
)
tm.assert_series_equal(result, expected)

@pytest.mark.parametrize("func", ["max", "min"])
def test_groupby_rolling_index_changed(self, func):
# GH: #36018 nlevels of MultiIndex changed
ds = Series(
[1, 2, 2],
index=pd.MultiIndex.from_tuples(
[("a", "x"), ("a", "y"), ("c", "z")], names=["1", "2"]
),
name="a",
)

result = getattr(ds.groupby(ds).rolling(2), func)()
expected = Series(
[np.nan, np.nan, 2.0],
index=pd.MultiIndex.from_tuples(
[(1, "a", "x"), (2, "a", "y"), (2, "c", "z")], names=["a", "1", "2"]
),
name="a",
)
tm.assert_series_equal(result, expected)

0 comments on commit ce0476f

Please sign in to comment.