@@ -194,6 +194,23 @@ cdef class _BaseGrouper:
194
194
195
195
return values, index
196
196
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
+
197
214
198
215
cdef class SeriesBinGrouper(_BaseGrouper):
199
216
"""
@@ -265,20 +282,8 @@ cdef class SeriesBinGrouper(_BaseGrouper):
265
282
islider.set_length(group_size)
266
283
vslider.set_length(group_size)
267
284
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)
282
287
283
288
cached_ityp._engine.clear_mapping()
284
289
res = self .f(cached_typ)
@@ -379,17 +384,8 @@ cdef class SeriesGrouper(_BaseGrouper):
379
384
islider.set_length(group_size)
380
385
vslider.set_length(group_size)
381
386
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)
393
389
394
390
cached_ityp._engine.clear_mapping()
395
391
res = self .f(cached_typ)
0 commit comments