Вы можете попробовать использовать groupby
с apply
и nlargest
:
result_df = df.groupby('Condition')['Name'].apply(lambda grp: grp.value_counts().nlargest(2)).reset_index()
result_df.columns = ['Condition','Name','Frequency']
print(result_df)
Результат:
Condition Name Frequency
0 a Jack 2
1 a Tom 2
2 b Lily 2
3 b Lucy 1
Обновление
Для отредактированного вопроса:вероятно, сработает следующее:
df.groupby('Name').size().nlargest(3).to_frame('Frequency')
Результат:
Frequency
Name
Jack 2
Lily 2
Tom 2