@@ -829,19 +829,29 @@ def nth(self, n, dropna=None):
829
829
dropped = self .obj .dropna (how = dropna , axis = self .axis )
830
830
831
831
# get a new grouper for our dropped obj
832
- grouper , exclusions , obj = _get_grouper (dropped , key = self .keys , axis = self .axis ,
833
- level = self .level , sort = self .sort )
832
+ if self .keys is None and self .level is None :
834
833
835
- sizes = obj .groupby (grouper ).size ()
836
- result = obj .groupby (grouper ).nth (n )
834
+ # we don't have the grouper info available (e.g. we have selected out
835
+ # a column that is not in the current object)
836
+ axis = self .grouper .axis
837
+ grouper = axis [axis .isin (dropped .index )]
838
+ keys = self .grouper .names
839
+ else :
840
+
841
+ # create a grouper with the original parameters, but on the dropped object
842
+ grouper , _ , _ = _get_grouper (dropped , key = self .keys , axis = self .axis ,
843
+ level = self .level , sort = self .sort )
844
+
845
+ sizes = dropped .groupby (grouper ).size ()
846
+ result = dropped .groupby (grouper ).nth (n )
837
847
mask = (sizes < max_len ).values
838
848
839
849
# set the results which don't meet the criteria
840
850
if len (result ) and mask .any ():
841
851
result .loc [mask ] = np .nan
842
852
843
853
# reset/reindex to the original groups
844
- if len (self .obj ) == len (dropped ):
854
+ if len (self .obj ) == len (dropped ) or len ( result ) == len ( self . grouper . result_index ) :
845
855
result .index = self .grouper .result_index
846
856
else :
847
857
result = result .reindex (self .grouper .result_index )
0 commit comments