If you already have a sizes column, you can use the following.
df.groupby('some_id')['size'].value_counts().groupby(level=0).nlargest(2)
Otherwise, you can use this approach.
import pandas as pd df = pd.DataFrame({'some_id':[1,1,1,8,9,9,3,11], 'some_idx':[26,26,26,26,27,27,27,27]}) sizes = df.groupby(['some_id', 'some_idx']).size() sizes.groupby(level='some_idx').nlargest(2)
source share