Это сразу много вопросов:
a = data['Publisher'].groupby((data['Genre'] == 'Action')).value_counts().head(3)
print(a)
В группе вы делаете не указывать конкретный жанр, например «Экшн». Вот для чего нужен запрос. Задача groupby - выполнить следующие вычисления для каждые Жанр
In [11]: number_of_games = data.groupby('Genre')['Publisher'].value_counts()
Out[11]:
Genre Publisher
Action Activision 311
Namco Bandai Games 251
Ubisoft 198
THQ 194
Electronic Arts 183
...
Strategy Time Warner Interactive 1
Titus 1
Trion Worlds 1
Westwood Studios 1
Zoo Digital Publishing 1
Name: Publisher, dtype: int64
Обратите внимание, что выбор издателя выполняется после группировки, поэтому внутренне pandas перебирает все значения в жанре. и делает value_count для Publisher
Мне нужно найти 3 лучших издателя, которые продали больше всего экшенов, шутеров и платформеров
Просто отфильтруйте те категории, которые вам нравятся это
In [25]: number_of_games.loc[['Action', 'Shooter', 'Platform'], :]
Out[25]:
Genre Publisher
Action Activision 311
Namco Bandai Games 251
Ubisoft 198
THQ 194
Electronic Arts 183
...
Shooter Visco 1
Warashi 1
Wargaming.net 1
Xseed Games 1
id Software 1
Name: Publisher, dtype: int64
Затем вам снова нужны 3 крупнейших издателя для каждого жанра , и поэтому вы используете другую группу
In [30]: number_of_games.loc[['Action', 'Shooter', 'Platform'], :].groupby(['Genre']).head(3)
Out[30]:
Genre Publisher
Action Activision 311
Namco Bandai Games 251
Ubisoft 198
Platform Nintendo 112
THQ 85
Ubisoft 70
Shooter Activision 162
Electronic Arts 145
Ubisoft 92
Name: Publisher, dtype: int64
Функция head
неявно полагается на значения сортируются. В качестве альтернативы вы можете использовать nlargest
In [31]: number_of_games.loc[['Action', 'Shooter', 'Platform'], :].groupby(['Genre']).nlargest(3).droplevel(0)
Out[31]:
Genre Publisher
Action Activision 311
Namco Bandai Games 251
Ubisoft 198
Platform Nintendo 112
THQ 85
Ubisoft 70
Shooter Activision 162
Electronic Arts 145
Ubisoft 92
Name: Publisher, dtype: int64
Результат тот же, но вам нужно будет очистить индекс с помощью droplevel
, так как он появлялся дважды
А что, если я хочу включить временные рамки, например, сравнить все эти столбцы за последние 10 лет?
Очевидно, вы бы нужны данные за таймфрейм. Если вы хотите, чтобы игры были опубликованы только за последние 10 лет, отфильтруйте исходные данные для игр старше 10 лет. Если вы хотите определить, какие издатели публикуют больше всего каждый год, вы должны создать столбец с годом публикации и сгруппировать по нему. Вы уже видели, что с помощью Genre и Publisher можно группировать по списку функций.