pandas.core.groupby.GroupBy.nth

GroupBy.nth(self, n: Union[int, List[int]], dropna: Union[str, NoneType] = None) → pandas.core.frame.DataFrame[source]

Take the nth row from each group if n is an int, or a subset of rows if n is a list of ints.

If dropna, will take the nth non-null row, dropna is either ‘all’ or ‘any’; this is equivalent to calling dropna(how=dropna) before the groupby.

Parameters
nint or list of ints

A single nth value for the row or a list of nth values.

dropnaNone or str, optional

Apply the specified dropna operation before counting which row is the nth row. Needs to be None, ‘any’ or ‘all’.

Returns
Series or DataFrame

N-th value within each group.

See also

Series.groupby
DataFrame.groupby

Examples

>>> df = pd.DataFrame({'A': [1, 1, 2, 1, 2],
...                    'B': [np.nan, 2, 3, 4, 5]}, columns=['A', 'B'])
>>> g = df.groupby('A')
>>> g.nth(0)
     B
A
1  NaN
2  3.0
>>> g.nth(1)
     B
A
1  2.0
2  5.0
>>> g.nth(-1)
     B
A
1  4.0
2  5.0
>>> g.nth([0, 1])
     B
A
1  NaN
1  2.0
2  3.0
2  5.0

Specifying dropna allows count ignoring NaN

>>> g.nth(0, dropna='any')
     B
A
1  2.0
2  3.0

NaNs denote group exhausted when using dropna

>>> g.nth(3, dropna='any')
    B
A
1 NaN
2 NaN

Specifying as_index=False in groupby keeps the original index.

>>> df.groupby('A', as_index=False).nth(1)
   A    B
1  1  2.0
4  2  5.0