2
respostas

Sort_values - dúvida

Caros, boa noite

Estou finalizando o projeto e gostaria de fazer uma ordenação no dados pela média como exemplo abaixo, porém sempre retorna erro ao chamar o método sort_values.

renda_UF = dados.groupby(['UF']).agg({'Renda': ['mean', 'median', 'max', 'std']})
renda_UF.rename(index = uf)
renda_UF.sort_values(by='mean')

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-79-0b946db2f29f> in <module>
      1 renda_UF = dados.groupby(['UF']).agg({'Renda': ['mean', 'median', 'max', 'std']})
      2 renda_UF.rename(index = uf)
----> 3 renda_UF.sort_values(by='mean')

E:\Anaconda\lib\site-packages\pandas\core\frame.py in sort_values(self, by, axis, ascending, inplace, kind, na_position, ignore_index, key)
   5292 
   5293             by = by[0]
-> 5294             k = self._get_label_or_level_values(by, axis=axis)
   5295 
   5296             # need to rewrap column in Series to apply key function

E:\Anaconda\lib\site-packages\pandas\core\generic.py in _get_label_or_level_values(self, key, axis)
   1561             values = self.axes[axis].get_level_values(key)._values
   1562         else:
-> 1563             raise KeyError(key)
   1564 
   1565         # Check for duplicates

KeyError: 'mean'

Não sei se estou fazendo algo errado mas não consegui o que eu gostaria rsrs

2 respostas

Amigos, alguma sugestão de resposta? rsrs

Bom dia Ramon, tudo bem? Espero que sim!

Tente usar o código:

renda_UF = dados.groupby(['UF']).agg({'Renda': ['mean', 'median', 'max', 'std']})
renda_UF.columns = renda_UF.columns.droplevel(0)
renda_UF.sort_values(by='mean',ascending=False)

Colocando as colunas do dataframe como Series você vai conseguir acessá-las como por exemplo renda_UF['mean'] e conseguirá usar a função sort_values.

Porém se utilizar após isso a função renda_UF.rename(index = uf), para renomear os índices, voltará à ordem inicial que foi colocada no dicionário.

Por isso, você pode criar uma coluna com o nome dos estados, ou encontrar uma outra solução para alterar o nome. Vou deixar uma solução aqui:

Execute os blocos um a um e veja o resultado.


renda_UF = dados.groupby(['UF']).agg({'Renda': ['mean', 'median', 'max', 'std']})
renda_UF.columns = renda_UF.columns.droplevel(0)
renda_UF = renda_UF.sort_values(by='mean',ascending=False)
renda_UF

lista_estados = []
for indice in renda_UF.index:
    lista_estados.append(uf[indice])

renda_UF['estados'] = lista_estados
renda_UF

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!