In [12]: df.groupby('A', group_keys=False).apply(lambda x: x.loc[x.B.idxmax()]) Out[12]: A B A 1 1 20 2 2 40 3 3 10