Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
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
4 changes: 2 additions & 2 deletions pandas/core/window/rolling.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ def _insert_on_column(self, result: "DataFrame", obj: "DataFrame"):

if self.on is not None and not self._on.equals(obj.index):
name = self._on.name
extra_col = Series(self._on, index=obj.index, name=name)
extra_col = Series(self._on, index=self.obj.index, name=name).sort_index()
if name in result.columns:
# TODO: sure we want to overwrite results?
result[name] = extra_col
Expand Down Expand Up @@ -2268,7 +2268,7 @@ def _get_window_indexer(self, window: int) -> GroupbyRollingIndexer:
"""
rolling_indexer: Type[BaseIndexer]
indexer_kwargs: Optional[Dict] = None
index_array = self.obj.index.asi8
index_array = self._on.asi8
if isinstance(self.window, BaseIndexer):
rolling_indexer = type(self.window)
indexer_kwargs = self.window.__dict__
Expand Down
29 changes: 29 additions & 0 deletions pandas/tests/window/test_grouper.py
Original file line number Diff line number Diff line change
Expand Up @@ -416,3 +416,32 @@ def test_groupby_rolling_empty_frame(self):
result = expected.groupby(["s1", "s2"]).rolling(window=1).sum()
expected.index = pd.MultiIndex.from_tuples([], names=["s1", "s2", None])
tm.assert_frame_equal(result, expected)

def test_groupby_rolling_string_index(self):
# GH: 36727
df = pd.DataFrame(
[
["A", "group_1", pd.Timestamp(2019, 1, 1, 9)],
["B", "group_1", pd.Timestamp(2019, 1, 2, 9)],
["Z", "group_2", pd.Timestamp(2019, 1, 3, 9)],
["H", "group_1", pd.Timestamp(2019, 1, 6, 9)],
["E", "group_2", pd.Timestamp(2019, 1, 20, 9)],
],
columns=["index", "group", "eventTime"],
).set_index("index")

groups = df.groupby("group")
df["count_to_date"] = groups.cumcount()
rolling_groups = groups.rolling("10d", on="eventTime")
result = rolling_groups.apply(lambda df: df.shape[0])
expected = pd.DataFrame(
[
["A", "group_1", pd.Timestamp(2019, 1, 1, 9), 1.0],
["B", "group_1", pd.Timestamp(2019, 1, 2, 9), 2.0],
["H", "group_1", pd.Timestamp(2019, 1, 6, 9), 3.0],
["Z", "group_2", pd.Timestamp(2019, 1, 3, 9), 1.0],
["E", "group_2", pd.Timestamp(2019, 1, 20, 9), 1.0],
],
columns=["index", "group", "eventTime", "count_to_date"],
).set_index(["group", "index"])
tm.assert_frame_equal(result, expected)