@@ -829,19 +829,29 @@ def nth(self, n, dropna=None):
829829 dropped = self .obj .dropna (how = dropna , axis = self .axis )
830830
831831 # 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 :
834833
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 )
837847 mask = (sizes < max_len ).values
838848
839849 # set the results which don't meet the criteria
840850 if len (result ) and mask .any ():
841851 result .loc [mask ] = np .nan
842852
843853 # 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 ) :
845855 result .index = self .grouper .result_index
846856 else :
847857 result = result .reindex (self .grouper .result_index )
0 commit comments