Olá pessoal,
No curso, temos esse trecho de código para criar uma tabela com o setor mais poluente por tipo de gás e sua respectiva emissão:
valores_max = gas_por_setor.groupby(level=0).max().values
tabela_sumarizada = gas_por_setor.groupby(level=0).idxmax()
tabela_sumarizada.insert(1, 'Quantidade de emissão', valores_max)
Resolvi explorar uma alternativa mais concisa e direta, usando o método .agg()
:
tabela_sumarizada = gas_por_setor.groupby(level=0, observed=True).agg(['idxmax', 'max'])
tabela_sumarizada.columns = ['Setor mais poluente', 'Emissão']
Até aqui, a saída ficava assim:
Setor mais poluente Emissão
Gás
CO2 (t) (CO2 (t), Mudança de Uso da Terra e Floresta) 3.733930e+10
CH4 (t) (CH4 (t), Agropecuária) 5.928481e+08
...
Minha abordagem
Percebi que a coluna 'Setor mais poluente'
estava trazendo uma tupla completa com o índice original — ou seja, incluía tanto o nome do gás quanto o setor.
Para limpar isso, usei .str[1]
, que acessa o segundo elemento da tupla, correspondente ao setor:
tabela_sumarizada['Setor mais poluente'] = tabela_sumarizada['Setor mais poluente'].str[1]
Resultado final:
Setor mais poluente Emissão
Gás
CO2 (t) Mudança de Uso da Terra e Floresta 3.733930e+10
CH4 (t) Agropecuária 5.928481e+08
...
Ficou mais limpo e fácil de ler.
Qual a utilidade?
- O
.agg(['idxmax', 'max'])
permite obter os dois resultados em uma única operação. - O
.str[1]
é uma forma simples e eficiente de extrair parte de uma tupla armazenada em células do DataFrame. - A legibilidade da tabela melhora com essa abordagem.
Abraço.