Eu tenho um quadro de dados df
e uso várias colunas para groupby
:
df['col1','col2','col3','col4'].groupby(['col1','col2']).mean()
Da maneira acima, quase recebo a tabela (quadro de dados) necessária. O que está faltando é uma coluna adicional que contém o número de linhas em cada grupo. Em outras palavras, quero dizer, mas também gostaria de saber quantos números foram usados para obter esses meios. Por exemplo, no primeiro grupo, existem 8 valores e, no segundo, 10 e assim por diante.
Resumindo: Como obtenho estatísticas em grupo para um dataframe?
df[['col1','col2','col3','col4']].groupby(['col1','col2']).agg(['mean', 'count'])
count
coluna por grupo.result = df['col1','col2','col3','col4'].groupby(['col1', 'col2']).mean() ; counts = times.groupby(['col1', 'col2']).size() ; result['count'] = counts
Resposta rápida:
A maneira mais simples de obter contagens de linhas por grupo é chamando
.size()
, que retornaSeries
:Normalmente, você deseja esse resultado como
DataFrame
(em vez de aSeries
) para poder:Se você quiser descobrir como calcular as contagens de linhas e outras estatísticas para cada grupo, continue lendo abaixo.
Exemplo detalhado:
Considere o seguinte exemplo de quadro de dados:
Primeiro vamos usar
.size()
para obter a contagem de linhas:Então vamos usar
.size().reset_index(name='counts')
para obter a contagem de linhas:Incluindo resultados para mais estatísticas
Quando você deseja calcular estatísticas sobre dados agrupados, geralmente é assim:
O resultado acima é um pouco chato de lidar por causa dos rótulos das colunas aninhadas e também porque as contagens de linhas são por coluna.
Para obter mais controle sobre a saída, costumo dividir as estatísticas em agregações individuais que depois combino
join
. Se parece com isso:Notas de rodapé
O código usado para gerar os dados de teste é mostrado abaixo:
Aviso Legal:
Se algumas das colunas que você está agregando tiverem valores nulos, você realmente deseja observar as contagens de linhas do grupo como uma agregação independente para cada coluna. Caso contrário, você poderá se enganar sobre quantos registros estão realmente sendo usados para calcular coisas como a média, porque os pandas descartarão
NaN
entradas no cálculo da média sem informar sobre isso.fonte
In [5]: counts_df = pd.DataFrame(df.groupby('col1').size().rename('counts'))
, talvez seja melhor para definir o tamanho () como uma nova coluna se você gostaria de manipular a trama de dados para análise posterior, que deve sercounts_df = pd.DataFrame(df.groupby('col1').size().reset_index(name='counts')
isnull
essa consulta para incluí -la em uma coluna também?'col4': ['median', 'min', 'count', 'isnull']
Uma função para governá-los todos:
GroupBy.describe
Retornos
count
,mean
,std
, e outras estatísticas úteis por grupo.Para obter estatísticas específicas, basta selecioná-las,
describe
funciona para várias colunas (altere['C']
para['C', 'D']
- ou remova-o completamente - e veja o que acontece, o resultado é um quadro de dados em coluna MultiIndexed).Você também obtém estatísticas diferentes para dados de sequência. Aqui está um exemplo,
Para mais informações, consulte a documentação .
fonte
Podemos fazer isso facilmente usando groupby e count. Mas, devemos lembrar de usar reset_index ().
fonte
Para obter várias estatísticas, reduza o índice e mantenha os nomes das colunas:
Produz:
fonte
Crie um objeto de grupo e chame métodos como o exemplo abaixo:
fonte
Por favor, tente este código
Eu acho que esse código adicionará uma coluna chamada 'conte-o', que conte cada grupo
fonte