Skip to content

Commit 84961f5

Browse files
phoflKevin D Smith
authored and
Kevin D Smith
committed
BUG: Segfault with string Index when using Rolling after Groupby (pandas-dev#36753)
1 parent 6450fff commit 84961f5

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

pandas/core/window/rolling.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ def _insert_on_column(self, result: "DataFrame", obj: "DataFrame"):
398398

399399
if self.on is not None and not self._on.equals(obj.index):
400400
name = self._on.name
401-
extra_col = Series(self._on, index=obj.index, name=name)
401+
extra_col = Series(self._on, index=self.obj.index, name=name)
402402
if name in result.columns:
403403
# TODO: sure we want to overwrite results?
404404
result[name] = extra_col
@@ -2263,7 +2263,7 @@ def _get_window_indexer(self, window: int) -> GroupbyRollingIndexer:
22632263
"""
22642264
rolling_indexer: Type[BaseIndexer]
22652265
indexer_kwargs: Optional[Dict] = None
2266-
index_array = self.obj.index.asi8
2266+
index_array = self._on.asi8
22672267
if isinstance(self.window, BaseIndexer):
22682268
rolling_indexer = type(self.window)
22692269
indexer_kwargs = self.window.__dict__

pandas/tests/window/test_grouper.py

+29
Original file line numberDiff line numberDiff line change
@@ -428,3 +428,32 @@ def test_groupby_rolling_empty_frame(self):
428428
result = expected.groupby(["s1", "s2"]).rolling(window=1).sum()
429429
expected.index = pd.MultiIndex.from_tuples([], names=["s1", "s2", None])
430430
tm.assert_frame_equal(result, expected)
431+
432+
def test_groupby_rolling_string_index(self):
433+
# GH: 36727
434+
df = pd.DataFrame(
435+
[
436+
["A", "group_1", pd.Timestamp(2019, 1, 1, 9)],
437+
["B", "group_1", pd.Timestamp(2019, 1, 2, 9)],
438+
["Z", "group_2", pd.Timestamp(2019, 1, 3, 9)],
439+
["H", "group_1", pd.Timestamp(2019, 1, 6, 9)],
440+
["E", "group_2", pd.Timestamp(2019, 1, 20, 9)],
441+
],
442+
columns=["index", "group", "eventTime"],
443+
).set_index("index")
444+
445+
groups = df.groupby("group")
446+
df["count_to_date"] = groups.cumcount()
447+
rolling_groups = groups.rolling("10d", on="eventTime")
448+
result = rolling_groups.apply(lambda df: df.shape[0])
449+
expected = pd.DataFrame(
450+
[
451+
["A", "group_1", pd.Timestamp(2019, 1, 1, 9), 1.0],
452+
["B", "group_1", pd.Timestamp(2019, 1, 2, 9), 2.0],
453+
["H", "group_1", pd.Timestamp(2019, 1, 6, 9), 3.0],
454+
["Z", "group_2", pd.Timestamp(2019, 1, 3, 9), 1.0],
455+
["E", "group_2", pd.Timestamp(2019, 1, 20, 9), 1.0],
456+
],
457+
columns=["index", "group", "eventTime", "count_to_date"],
458+
).set_index(["group", "index"])
459+
tm.assert_frame_equal(result, expected)

0 commit comments

Comments
 (0)