Photo by UX Indonesia on Unsplash |
O agrupamento e a classificação de dados é uma das tarefas mais básicas durante a análise de dados. É comum selecionar linhas que tenham o maior valor dentro de uma coluna e classificar esses valores em grupos. Por exemplo, se você precisar saber qual foi o filme de 2016 com maior audiência ou qual é a classificação de filme que arrecada mais com bilheteria, isso seria feito classificando os grupos. Primeiro é preciso separar os filmes por ano e depois selecionar os filmes com maior bilheteria.
Nesse tutorial, vamos descobrir qual é o anime com o maior rank entre os animes com os scores mais altos.
Como agrupar e ordenar com pandas
Primeiro vamos carregar o dataset e selecionar as colunas que nos interessa: title
, rank
e score
. O dataset que vamos utilizar pode ser baixado aqui.
>>> import pandas as pd >>> animelist = pd.read_csv('animelist.csv') >>> animelist = animelist[['title', 'score', 'rank']] >>> animelist title score rank 0 Inu x Boku SS 7.63 1274.0 1 Seto no Hanayome 7.89 727.0 2 Shugo Chara!! Doki 7.55 1508.0 3 Princess Tutu 8.21 307.0 4 Bakuman. 3rd Season 8.67 50.0 ... ... ... ... 14473 Gutchonpa Omoshiro Hanashi 5.50 10337.0 14474 Geba Geba Shou Time! 4.60 10236.0 14475 Godzilla: Hoshi wo Kuu Mono 0.00 NaN 14476 Nippon Mukashibanashi: Sannen Netarou 6.00 11557.0 14477 Senjou no Valkyria Special 5.15 12056.0 [14478 rows x 3 columns]
Vamos utilizar o método sort_values()
para ordenar o dataframe por score. Esse método vai ordenar todo o dataframe começando do menor para o maior. Assim as primeiras linhas serão os animes com os menores score. Para inverter isso passamos o valor False
para o parâmetro ascending.
>>> animelist.sort_values(by='score', ascending=False) title score rank 14407 Ittekimasu 10.00 10657.0 14317 Kuunyan no Koutsuu Anzen: Tadashii Jitensha no... 10.00 11071.0 548 Manichi ga Tsurai Kimochi Wakarimasu ka: Yurus... 10.00 11178.0 14467 Kyouiku Eiga-sai Jushou Anime Series 10.00 11091.0 14403 Dokidoki Little Ooyasan 9.52 NaN ... ... ... ... 6557 Asagao to Kase-san. 0.00 NaN 6614 Boogiepop wa Warawanai 0.00 NaN 14067 BanG Dream! 2nd Season 0.00 0.0 12964 Katsugeki/Touken Ranbu Movie 0.00 NaN 12039 Moshimoshi, Terumi Desu. 0.00 NaN [14478 rows x 3 columns]
No exemplo acima, os dados foram ordenados de acordo com o score, do maior para o menor. Para ordenar várias colunas, vamos usar uma lista com os nomes das colunas que queremos ordenar.
>>> animelist.sort_values(by=['score', 'rank'], ascending=False) title score rank 548 Manichi ga Tsurai Kimochi Wakarimasu ka: Yurus... 10.00 11178.0 14467 Kyouiku Eiga-sai Jushou Anime Series 10.00 11091.0 14317 Kuunyan no Koutsuu Anzen: Tadashii Jitensha no... 10.00 11071.0 14407 Ittekimasu 10.00 10657.0 14403 Dokidoki Little Ooyasan 9.52 NaN ... ... ... ... 14414 Shinya! Tensai Bakabon 0.00 NaN 14416 Chikyuugai Shounen Shoujo 0.00 NaN 14417 Uchuu no Hou: Reimei-hen 0.00 NaN 14463 Space Bug 0.00 NaN 14475 Godzilla: Hoshi wo Kuu Mono 0.00 NaN [14478 rows x 3 columns]
Note que as duas colunas foram ordenadas do maior para o menor. A biblioteca pandas seleciona o score mais alto e depois seleciona os ranks mais altos com o mesmo score. Desse modo, agrupamos os animes de acordo com o score e o rank. Assim obtemos a informação de que o anime com maior rank, entre os animes que tem o maior score, é o Manichi ga Tsurai. Podemos obter um par score/rank dos maiores valores de cada score diferente chamando o método drop_duplicates()
.
>>> ( ... animelist.sort_values(by=['score', 'rank'], ascending=False) ... .drop_duplicates(subset='score') ... ) title score rank 548 Manichi ga Tsurai Kimochi Wakarimasu ka: Yurus... 10.00 11178.0 14403 Dokidoki Little Ooyasan 9.52 NaN 14454 Tat-chan - Momo-chan no Fushigina Taiken 9.50 12430.0 2555 Fullmetal Alchemist: Brotherhood 9.25 1.0 3129 Okaachan Gomen ne 9.20 11595.0 ... ... ... ... 12844 Dragon Egg 1.50 10028.0 14420 Cofun Gal no Coffy (TV): Christmas Daisakusen 1.33 9959.0 14393 Atashi Tenshi Anata Akuma 1.25 9712.0 13955 Woo to Wah 1.00 12678.0 14425 Wo Shi Jiang Xiaobai (2018) 0.00 12719.0 [630 rows x 3 columns]
Por padrão, o método drop_duplicates()
pega o primeiro valor. Podemos mudar esse comportamento passando o valor 'last
' para o parâmetro keep
.
>>> ( ... animelist.sort_values(by=['score', 'rank'], ascending=False) ... .drop_duplicates(subset='score', keep='last') ... ) title score rank 14407 Ittekimasu 10.00 10657.0 14403 Dokidoki Little Ooyasan 9.52 NaN 14208 Hashire John 9.50 10357.0 2555 Fullmetal Alchemist: Brotherhood 9.25 1.0 3129 Okaachan Gomen ne 9.20 11595.0 ... ... ... ... 12844 Dragon Egg 1.50 10028.0 14420 Cofun Gal no Coffy (TV): Christmas Daisakusen 1.33 9959.0 14393 Atashi Tenshi Anata Akuma 1.25 9712.0 14187 Gomen ne Chitchi 1.00 10256.0 14475 Godzilla: Hoshi wo Kuu Mono 0.00 NaN [630 rows x 3 columns]
Referência:
Método sort_values()
0 comentários:
Postar um comentário