@@ -134,7 +134,9 @@ def __new__(cls, *args, **kwargs):
134
134
cls = TimeGrouper
135
135
return super ().__new__ (cls )
136
136
137
- def __init__ (self , key = None , level = None , freq = None , axis = 0 , sort = False ):
137
+ def __init__ (
138
+ self , key = None , level = None , freq = None , axis = 0 , sort = False , dropna = True
139
+ ):
138
140
self .key = key
139
141
self .level = level
140
142
self .freq = freq
@@ -146,6 +148,7 @@ def __init__(self, key=None, level=None, freq=None, axis=0, sort=False):
146
148
self .indexer = None
147
149
self .binner = None
148
150
self ._grouper = None
151
+ self .dropna = dropna
149
152
150
153
@property
151
154
def ax (self ):
@@ -171,6 +174,7 @@ def _get_grouper(self, obj, validate: bool = True):
171
174
level = self .level ,
172
175
sort = self .sort ,
173
176
validate = validate ,
177
+ dropna = self .dropna ,
174
178
)
175
179
return self .binner , self .grouper , self .obj
176
180
@@ -283,6 +287,7 @@ def __init__(
283
287
sort : bool = True ,
284
288
observed : bool = False ,
285
289
in_axis : bool = False ,
290
+ dropna : bool = True ,
286
291
):
287
292
self .name = name
288
293
self .level = level
@@ -293,6 +298,7 @@ def __init__(
293
298
self .obj = obj
294
299
self .observed = observed
295
300
self .in_axis = in_axis
301
+ self .dropna = dropna
296
302
297
303
# right place for this?
298
304
if isinstance (grouper , (Series , Index )) and name is None :
@@ -446,7 +452,9 @@ def _make_codes(self) -> None:
446
452
codes = self .grouper .codes_info
447
453
uniques = self .grouper .result_index
448
454
else :
449
- codes , uniques = algorithms .factorize (self .grouper , sort = self .sort )
455
+ codes , uniques = algorithms .factorize (
456
+ self .grouper , sort = self .sort , dropna = self .dropna
457
+ )
450
458
uniques = Index (uniques , name = self .name )
451
459
self ._codes = codes
452
460
self ._group_index = uniques
@@ -465,6 +473,7 @@ def get_grouper(
465
473
observed : bool = False ,
466
474
mutated : bool = False ,
467
475
validate : bool = True ,
476
+ dropna : bool = True ,
468
477
) -> "Tuple[ops.BaseGrouper, List[Hashable], FrameOrSeries]" :
469
478
"""
470
479
Create and return a BaseGrouper, which is an internal
@@ -655,6 +664,7 @@ def is_in_obj(gpr) -> bool:
655
664
sort = sort ,
656
665
observed = observed ,
657
666
in_axis = in_axis ,
667
+ dropna = dropna ,
658
668
)
659
669
if not isinstance (gpr , Grouping )
660
670
else gpr
0 commit comments