Все довольно просто, на будущее если запутался, то предоставляй:
1. Входные данные (фрейм)
2 . Что хотелось бы получить.
3. Ну и попытку решения (ее ты предоставил, пытался вопросов нет).
Сделаю за тебя фрейм со случайными данными и затем решу вопрос.
df = pd.DataFrame({
'A':[np.random.randint(1,100,20) for i in range(5)],
})
Решение
result = (
df.assign(
three_largest = lambda x: x['A'].apply(lambda x: pd.Series(x).nlargest(3).tolist()),
three_largest_index = lambda x: x['A'].apply(lambda x: pd.Series(x).nlargest(3).index.tolist())
)
)
Если захочешь разложить свои списки на отдельные колонки то используй следующий трюк.
result[['one','two','three']] = pd.DataFrame(result['three_largest_index'].tolist(),index=result.index)
result
Как видишь все в разных вариациях, как удобно.