Skip to content

Commit a280542

Browse files
jbrockmendelTLouf
authored andcommitted
REF: Grouper.grouper -> Grouper._gpr_index (pandas-dev#41540)
1 parent 9a13f98 commit a280542

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

pandas/core/groupby/grouper.py

+16-8
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ class Grouper:
252252
axis: int
253253
sort: bool
254254
dropna: bool
255+
_gpr_index: Index | None
256+
_grouper: Index | None
255257

256258
_attributes: tuple[str, ...] = ("key", "level", "freq", "axis", "sort")
257259

@@ -279,6 +281,7 @@ def __init__(
279281
self.sort = sort
280282

281283
self.grouper = None
284+
self._gpr_index = None
282285
self.obj = None
283286
self.indexer = None
284287
self.binner = None
@@ -288,8 +291,11 @@ def __init__(
288291

289292
@final
290293
@property
291-
def ax(self):
292-
return self.grouper
294+
def ax(self) -> Index:
295+
index = self._gpr_index
296+
if index is None:
297+
raise ValueError("_set_grouper must be called before ax is accessed")
298+
return index
293299

294300
def _get_grouper(self, obj: FrameOrSeries, validate: bool = True):
295301
"""
@@ -317,6 +323,7 @@ def _get_grouper(self, obj: FrameOrSeries, validate: bool = True):
317323
validate=validate,
318324
dropna=self.dropna,
319325
)
326+
320327
return self.binner, self.grouper, self.obj
321328

322329
@final
@@ -338,14 +345,17 @@ def _set_grouper(self, obj: FrameOrSeries, sort: bool = False):
338345

339346
# Keep self.grouper value before overriding
340347
if self._grouper is None:
341-
self._grouper = self.grouper
348+
# TODO: What are we assuming about subsequent calls?
349+
self._grouper = self._gpr_index
342350
self._indexer = self.indexer
343351

344352
# the key must be a valid info item
345353
if self.key is not None:
346354
key = self.key
347355
# The 'on' is already defined
348-
if getattr(self.grouper, "name", None) == key and isinstance(obj, Series):
356+
if getattr(self._gpr_index, "name", None) == key and isinstance(
357+
obj, Series
358+
):
349359
# Sometimes self._grouper will have been resorted while
350360
# obj has not. In this case there is a mismatch when we
351361
# call self._grouper.take(obj.index) so we need to undo the sorting
@@ -390,10 +400,8 @@ def _set_grouper(self, obj: FrameOrSeries, sort: bool = False):
390400
# error: Incompatible types in assignment (expression has type
391401
# "FrameOrSeries", variable has type "None")
392402
self.obj = obj # type: ignore[assignment]
393-
# error: Incompatible types in assignment (expression has type "Index",
394-
# variable has type "None")
395-
self.grouper = ax # type: ignore[assignment]
396-
return self.grouper
403+
self._gpr_index = ax
404+
return self._gpr_index
397405

398406
@final
399407
@property

pandas/core/resample.py

+2
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ def obj(self) -> FrameOrSeries: # type: ignore[override]
198198

199199
@property
200200
def ax(self):
201+
# we can infer that this is a PeriodIndex/DatetimeIndex/TimedeltaIndex,
202+
# but skipping annotating bc the overrides overwhelming
201203
return self.groupby.ax
202204

203205
@property

0 commit comments

Comments
 (0)