Чтобы найти средние значения просмотров и рейтинга для каждого сезона, сначала необходимо отсортировать группу по сезонам.
Я предполагаю, что:
- строка[1] - заголовок,
- строка [4] - сезон,
- строка [7] - количество просмотров,
- строка [9] - показатель.
Итак, я думаю, у вас есть что-то вроде этого (я заменил неизвестные значения на None
):
rows = [
('title1', None, None, None, 1, None, None, 30.4, None, 8.5),
('title2', None, None, None, 2, None, None, 27.5, None, 6.5),
('title3', None, None, None, 1, None, None, 40.2, None, 4.0),
('title4', None, None, None, 1, None, None, 21.9, None, 2.6),
]
Чтобы отсортировать и сгруппировать строки и извлечьзначения из строк можно использовать operator.itemgetter
, например:
import operator
get_season = operator.itemgetter(4)
get_views = operator.itemgetter(7)
get_rate = operator.itemgetter(9)
Имея это в виду, вы можете рассчитать средние значения:
import itertools
rows.sort(key=get_season)
for season, group in itertools.groupby(rows, key=get_season):
group = list(group)
count = len(group)
total_views = sum(get_views(row) for row in group)
total_rate = sum(get_rate(row) for row in group)
mean_views = total_views / count
mean_rate = total_rate / count
print(f"season {season} - views: {mean_views:.2f}, rate: {mean_rate:.2f}")
Вы получите:
season 1 - views: 30.83, rate: 5.03
season 2 - views: 27.50, rate: 6.50
Как описано в другом ответе, вы также можете использовать модуль статистики:
import itertools
import statistics
rows.sort(key=get_season)
for season, group in itertools.groupby(rows, key=get_season):
group = list(group)
mean_views = statistics.mean(get_views(row) for row in group)
mean_rate = statistics.mean(get_rate(row) for row in group)
print(
f"season {season} - views: {mean_views:.2f}, rate: {mean_rate:.2f}")