Skip to content

Commit 95a45b9

Browse files
jbrockmendelproost
authored andcommitted
REF: de-duplicate _update_cached_objs (pandas-dev#29548)
1 parent b3e0ed1 commit 95a45b9

File tree

1 file changed

+21
-25
lines changed

1 file changed

+21
-25
lines changed

pandas/_libs/reduction.pyx

+21-25
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,23 @@ cdef class _BaseGrouper:
194194

195195
return values, index
196196

197+
cdef inline _update_cached_objs(self, object cached_typ, object cached_ityp,
198+
Slider islider, Slider vslider, object name):
199+
if cached_typ is None:
200+
cached_ityp = self.ityp(islider.buf)
201+
cached_typ = self.typ(vslider.buf, index=cached_ityp, name=name)
202+
else:
203+
# See the comment in indexes/base.py about _index_data.
204+
# We need this for EA-backed indexes that have a reference
205+
# to a 1-d ndarray like datetime / timedelta / period.
206+
object.__setattr__(cached_ityp, '_index_data', islider.buf)
207+
cached_ityp._engine.clear_mapping()
208+
object.__setattr__(cached_typ._data._block, 'values', vslider.buf)
209+
object.__setattr__(cached_typ, '_index', cached_ityp)
210+
object.__setattr__(cached_typ, 'name', name)
211+
212+
return cached_typ, cached_ityp
213+
197214

198215
cdef class SeriesBinGrouper(_BaseGrouper):
199216
"""
@@ -265,20 +282,8 @@ cdef class SeriesBinGrouper(_BaseGrouper):
265282
islider.set_length(group_size)
266283
vslider.set_length(group_size)
267284

268-
if cached_typ is None:
269-
cached_ityp = self.ityp(islider.buf)
270-
cached_typ = self.typ(vslider.buf, index=cached_ityp,
271-
name=name)
272-
else:
273-
# See the comment in indexes/base.py about _index_data.
274-
# We need this for EA-backed indexes that have a reference
275-
# to a 1-d ndarray like datetime / timedelta / period.
276-
object.__setattr__(cached_ityp, '_index_data', islider.buf)
277-
cached_ityp._engine.clear_mapping()
278-
object.__setattr__(
279-
cached_typ._data._block, 'values', vslider.buf)
280-
object.__setattr__(cached_typ, '_index', cached_ityp)
281-
object.__setattr__(cached_typ, 'name', name)
285+
cached_typ, cached_ityp = self._update_cached_objs(
286+
cached_typ, cached_ityp, islider, vslider, name)
282287

283288
cached_ityp._engine.clear_mapping()
284289
res = self.f(cached_typ)
@@ -379,17 +384,8 @@ cdef class SeriesGrouper(_BaseGrouper):
379384
islider.set_length(group_size)
380385
vslider.set_length(group_size)
381386

382-
if cached_typ is None:
383-
cached_ityp = self.ityp(islider.buf)
384-
cached_typ = self.typ(vslider.buf, index=cached_ityp,
385-
name=name)
386-
else:
387-
object.__setattr__(cached_ityp, '_data', islider.buf)
388-
cached_ityp._engine.clear_mapping()
389-
object.__setattr__(
390-
cached_typ._data._block, 'values', vslider.buf)
391-
object.__setattr__(cached_typ, '_index', cached_ityp)
392-
object.__setattr__(cached_typ, 'name', name)
387+
cached_typ, cached_ityp = self._update_cached_objs(
388+
cached_typ, cached_ityp, islider, vslider, name)
393389

394390
cached_ityp._engine.clear_mapping()
395391
res = self.f(cached_typ)

0 commit comments

Comments
 (0)