У меня есть кадр данных эпизодов imdb, который включает название шоу, номер сезона, номер серии и рейтинг эпизодов. Я хочу отсортировать этот кадр данных по рейтингу, но с учетом того, что более поздний эпизод ДОЛЖЕН быть после более раннего эпизода для определенного шоу, даже если его рейтинг выше.
Вещи, которые я пробовал:
- Сортировка по рейтингу, номеру сезона, номеру эпизода (различные комбинации)
- Создание абсолютного номера эпизода на основе номера сезона и эпизода номер (например, 0, 1, 3, он же S01E01, S01E02, S01E03) и сортировка с этим
Мне удалось придумать функцию, которая делает то, что я хочу, и код ниже. Хотя он работает, он медленный, очень мутационный и плохо масштабируется. Я хочу найти лучший способ сделать это, с pandas.
def max_rating_by_episode_in_order(df: pd.DataFrame) -> pd.DataFrame:
new_df = pd.DataFrame()
copy_df = df.copy().sort_values(["showName", "seasonNumber", "episodeNumber"])
while len(copy_df) > 0:
next_highest = (
copy_df.reset_index()
.groupby("showName")
.first()
.sort_values("rating", ascending=False)
.head(1)
.reset_index()
)
new_df = pd.concat([new_df, next_highest], ignore_index=True)
copy_df = copy_df.drop(next_highest["index"].values[0])
return new_df
или без него. Вывод должен выглядеть примерно так:
showName seasonNumber episodeNumber rating
2 Broke Girls 1 1 7.5
'Til Death 1 1 7.4
'Til Death 1 2 7.5
21 Jump Street 1 1 7.4
2 Broke Girls 1 2 7.3
2 Broke Girls 1 3 7.3
2 Broke Girls 1 4 7.3
21 Jump Street 1 2 7.3
21 Jump Street 1 3 7.6
21 Jump Street 1 4 7.5
'Til Death 1 3 7.2
'Til Death 1 4 7.5
'Til Death 1 5 7.6
'Til Death 1 6 7.6
'Til Death 1 7 7.5
'Til Death 1 8 7.6
'Til Death 1 9 7.7
'Til Death 1 10 7.4
'Til Death 1 11 7.4
'Til Death 1 12 7.6
'Til Death 1 13 7.5
'Til Death 1 14 7.6
'Til Death 1 15 7.5
'Til Death 1 16 7.8
2 Broke Girls 1 5 7.2
2 Broke Girls 1 6 7.2