Uma última pergunta dos pandas novatos do dia: Como faço para gerar uma tabela para uma única série?
Por exemplo:
my_series = pandas.Series([1,2,2,3,3,3])
pandas.magical_frequency_function( my_series )
>> {
1 : 1,
2 : 2,
3 : 3
}
Muitas pesquisas no Google me levaram a Series.describe () e pandas.crosstabs, mas nenhum deles faz exatamente o que preciso: uma variável, conta por categorias. Ah, e seria bom se funcionasse para diferentes tipos de dados: strings, ints, etc.
.value_counts().sort_index(1)
, para evitar que a primeira coluna fique um pouco fora de ordemAttributeError: 'DataFrame' object has no attribute 'value_counts'
pd.value_counts(df.values.ravel())
que retorna uma série cujos atributosindex
evalues
contém os elementos únicos e suas contagens, respectivamente.Você pode usar a compreensão de lista em um dataframe para contar as frequências das colunas como tal
Demolir:
fonte
A resposta fornecida por @DSM é simples e direta, mas pensei em acrescentar minha própria opinião a esta pergunta. Se você olhar o código de pandas.value_counts , verá que há muita coisa acontecendo.
Se você precisar calcular a frequência de muitas séries, isso pode demorar um pouco. Uma implementação mais rápida seria usar numpy.unique com
return_counts = True
Aqui está um exemplo:
Observe aqui que o item retornado é um pandas.Series
Em comparação,
numpy.unique
retorna uma tupla com dois itens, os valores únicos e as contagens.Você pode então combiná-los em um dicionário:
E então em um
pandas.Series
fonte
para distribuição de frequência de uma variável com valores excessivos, você pode reduzir os valores em classes,
Aqui eu valores excessivos para a
employrate
variável, e não há significado de sua distribuição de frequência comvalues_count(normalize=True)
distribuição de frequência
values_count(normalize=True)
sem classificação, o comprimento do resultado aqui é 139 (parece sem sentido como uma distribuição de frequência):colocação classificação colocamos todos os valores com um determinado intervalo, ou seja.
após a classificação, temos uma distribuição de frequência clara. aqui podemos ver facilmente, que
37.64%
dos países têm taxa de emprego entre51-60%
e11.79%
dos países têm taxa de emprego entre71-80%
fonte