Oi, Marcel! Tudo bem com você? Espero que sim!
São dois métodos bem semelhantes mesmo, mas existem alguns detalhes particulares que os fazem ser diferentes. Para facilitar seu entendimento vou utilizar um DataFrame um pouco menor que o do exemplo que você deixou aqui do StackOverflow, beleza?
Montei o DataFrame df
da seguinte forma:
df = pd.DataFrame({'A':['ana','barbara','cassia','ana','ana','cassia'],
'B':['ana','cassia','cassia','barbara','cassia',np.nan],
'C':['cassia','cassia',np.nan,'barbara',np.nan,'barbara']})
Resultando no seguinte conjunto:
| A | B | C |
---|
0 | ana | ana | cassia |
1 | barbara | cassia | cassia |
2 | cassia | cassia | nan |
3 | ana | barbara | barbara |
4 | ana | cassia | nan |
5 | cassia | nan | barbara |
De início, vamos analisar apenas a coluna 'A'
. Ao utilizar o método value_counts()
na coluna A por meio de df['A'].value_counts()
teremos o seguinte retorno:
Notamos então que o value_counts()
calcula a quantidade de cada elemento e os apresenta ordenados por quantidade de frequência, como foi o exemplo dos elementos da coluna A. Se aplicarmos esse mesmo método à outra coluna, o tipo de ordenação será o mesmo.
Já o método groupby é um pouco diferente na sua forma de classificação, pois esse método tem como função agrupar o DataFrame por características de determinada(s) coluna(s) e apresentá-las. Para utilizar esse método é preciso definir a coluna com as características que serão agrupadas e a como elas serão agrupadas, nisso podemos escolher se será por média, soma, quantidade e outras opções que você pode ver através da documentação.
Acontece que ao utilizar o método count()
em groupby, será retornado a quantidade de vezes que os elementos da coluna definida se referenciou às demais, em outras palavras, é retornada a quantidade de vezes que os elementos de uma definida coluna estiveram na mesma linha dos elementos (diferentes de NaN) das outras colunas. Como um exemplo, ao agruparmos a coluna A de df
por frequência de elementos por meio de df.groupby('A').count()
temos o seguinte retorno:
Se olharmos com mais atenção ao DataFrame df
, veremos que foi contado quantas linhas de B e C os elementos de A apareceram ignorando a contagem dos valores NaN. Comparando a coluna A com a B, vemos que a os valores de B não são tão relevantes para esse método, exceto nos casos NaN:
Se você fizer a mesma comparação com a coluna C, você verá que 'ana'
terá apenas 2 casos porque existe um valor NaN na mesma linha de um dos elementos 'ana'
da coluna A.
Como a coluna A tem os mesmo elementos que ela mesma, utilizar o comando df.groupby('A')['A'].count()
retornará a quantidade de elementos na coluna A.
Na atividade do curso é verificado a frequência de valores válidos em 'Valor'
por meio da coluna 'Tipos'
, bem como foi feito na comparação entre as colunas A e B e A e C. Por conta disso, utilizar df.value_counts()
não seria tão interessante se a quantidade de valores válidos em ‘Tipos’ seja diferente da coluna ‘Valor’ e assim gerar um erro no gráfico ou em alguma outra análise que pode ser realizada, mas se o DataFrame não apresentar esse problema, é possível utilizar df.value_counts()
sem problemas. Além disso, acredito que o instrutor buscou aplicar na atividade o conteúdo passado na aula anterior, por isso optou por utilizar df.groupby()
. ;-)
Eu espero ter te ajudado! Se surgir outra dúvida estarei à disposição.
Bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!