@@ -127,6 +127,7 @@ class Resampler(BaseGroupBy, PandasObject):
127
127
"""
128
128
129
129
grouper : BinGrouper
130
+ _timegrouper : TimeGrouper
130
131
exclusions : frozenset [Hashable ] = frozenset () # for SelectionMixin compat
131
132
132
133
# to the groupby descriptor
@@ -152,7 +153,7 @@ def __init__(
152
153
selection = None ,
153
154
** kwargs ,
154
155
) -> None :
155
- self .groupby = groupby
156
+ self ._timegrouper = groupby
156
157
self .keys = None
157
158
self .sort = True
158
159
# error: Incompatible types in assignment (expression has type "Union
@@ -162,11 +163,11 @@ def __init__(
162
163
self .group_keys = group_keys
163
164
self .as_index = True
164
165
165
- self .groupby ._set_grouper (self ._convert_obj (obj ), sort = True )
166
+ self ._timegrouper ._set_grouper (self ._convert_obj (obj ), sort = True )
166
167
self .binner , self .grouper = self ._get_binner ()
167
168
self ._selection = selection
168
- if self .groupby .key is not None :
169
- self .exclusions = frozenset ([self .groupby .key ])
169
+ if self ._timegrouper .key is not None :
170
+ self .exclusions = frozenset ([self ._timegrouper .key ])
170
171
else :
171
172
self .exclusions = frozenset ()
172
173
@@ -187,17 +188,17 @@ def __str__(self) -> str:
187
188
Provide a nice str repr of our rolling object.
188
189
"""
189
190
attrs = (
190
- f"{ k } ={ getattr (self .groupby , k )} "
191
+ f"{ k } ={ getattr (self ._timegrouper , k )} "
191
192
for k in self ._attributes
192
- if getattr (self .groupby , k , None ) is not None
193
+ if getattr (self ._timegrouper , k , None ) is not None
193
194
)
194
195
return f"{ type (self ).__name__ } [{ ', ' .join (attrs )} ]"
195
196
196
197
def __getattr__ (self , attr : str ):
197
198
if attr in self ._internal_names_set :
198
199
return object .__getattribute__ (self , attr )
199
200
if attr in self ._attributes :
200
- return getattr (self .groupby , attr )
201
+ return getattr (self ._timegrouper , attr )
201
202
if attr in self .obj :
202
203
return self [attr ]
203
204
@@ -208,13 +209,13 @@ def __getattr__(self, attr: str):
208
209
def obj (self ) -> NDFrame : # type: ignore[override]
209
210
# error: Incompatible return value type (got "Optional[Any]",
210
211
# expected "NDFrameT")
211
- return self .groupby .obj # type: ignore[return-value]
212
+ return self ._timegrouper .obj # type: ignore[return-value]
212
213
213
214
@property
214
215
def ax (self ):
215
216
# we can infer that this is a PeriodIndex/DatetimeIndex/TimedeltaIndex,
216
217
# but skipping annotating bc the overrides overwhelming
217
- return self .groupby .ax
218
+ return self ._timegrouper .ax
218
219
219
220
@property
220
221
def _from_selection (self ) -> bool :
@@ -223,8 +224,8 @@ def _from_selection(self) -> bool:
223
224
"""
224
225
# upsampling and PeriodIndex resampling do not work
225
226
# with selection, this state used to catch and raise an error
226
- return self .groupby is not None and (
227
- self .groupby .key is not None or self .groupby .level is not None
227
+ return self ._timegrouper is not None and (
228
+ self ._timegrouper .key is not None or self ._timegrouper .level is not None
228
229
)
229
230
230
231
def _convert_obj (self , obj : NDFrameT ) -> NDFrameT :
@@ -252,7 +253,7 @@ def _get_binner(self):
252
253
"""
253
254
binner , bins , binlabels = self ._get_binner_for_time ()
254
255
assert len (bins ) == len (binlabels )
255
- bin_grouper = BinGrouper (bins , binlabels , indexer = self .groupby .indexer )
256
+ bin_grouper = BinGrouper (bins , binlabels , indexer = self ._timegrouper .indexer )
256
257
return binner , bin_grouper
257
258
258
259
@Substitution (
@@ -391,7 +392,9 @@ def transform(self, arg, *args, **kwargs):
391
392
2018-01-01 01:00:00 NaN
392
393
Freq: H, dtype: float64
393
394
"""
394
- return self ._selected_obj .groupby (self .groupby ).transform (arg , * args , ** kwargs )
395
+ return self ._selected_obj .groupby (self ._timegrouper ).transform (
396
+ arg , * args , ** kwargs
397
+ )
395
398
396
399
def _downsample (self , f , ** kwargs ):
397
400
raise AbstractMethodError (self )
@@ -1168,7 +1171,7 @@ def __init__(self, obj, parent=None, groupby=None, key=None, **kwargs) -> None:
1168
1171
self .key = key
1169
1172
1170
1173
self ._groupby = groupby
1171
- self .groupby = copy .copy (parent .groupby )
1174
+ self ._timegrouper = copy .copy (parent ._timegrouper )
1172
1175
1173
1176
@no_type_check
1174
1177
def _apply (self , f , * args , ** kwargs ):
@@ -1178,7 +1181,7 @@ def _apply(self, f, *args, **kwargs):
1178
1181
"""
1179
1182
1180
1183
def func (x ):
1181
- x = self ._shallow_copy (x , groupby = self .groupby )
1184
+ x = self ._shallow_copy (x , groupby = self ._timegrouper )
1182
1185
1183
1186
if isinstance (f , str ):
1184
1187
return getattr (x , f )(** kwargs )
@@ -1243,8 +1246,8 @@ def _get_binner_for_time(self):
1243
1246
1244
1247
# this is how we are actually creating the bins
1245
1248
if self .kind == "period" :
1246
- return self .groupby ._get_time_period_bins (self .ax )
1247
- return self .groupby ._get_time_bins (self .ax )
1249
+ return self ._timegrouper ._get_time_period_bins (self .ax )
1250
+ return self ._timegrouper ._get_time_bins (self .ax )
1248
1251
1249
1252
def _downsample (self , how , ** kwargs ):
1250
1253
"""
@@ -1373,7 +1376,7 @@ def _resampler_for_grouping(self):
1373
1376
def _get_binner_for_time (self ):
1374
1377
if self .kind == "timestamp" :
1375
1378
return super ()._get_binner_for_time ()
1376
- return self .groupby ._get_period_bins (self .ax )
1379
+ return self ._timegrouper ._get_period_bins (self .ax )
1377
1380
1378
1381
def _convert_obj (self , obj : NDFrameT ) -> NDFrameT :
1379
1382
obj = super ()._convert_obj (obj )
@@ -1483,7 +1486,7 @@ def _resampler_for_grouping(self):
1483
1486
return TimedeltaIndexResamplerGroupby
1484
1487
1485
1488
def _get_binner_for_time (self ):
1486
- return self .groupby ._get_time_delta_bins (self .ax )
1489
+ return self ._timegrouper ._get_time_delta_bins (self .ax )
1487
1490
1488
1491
def _adjust_binner_for_upsample (self , binner ):
1489
1492
"""
0 commit comments