Agrupamento e agregação com pandas

Aprenda a dividir um DataFrame do pandas em grupos e resumir cada um deles. Agrupe por colunas, chaves derivadas e níveis do índice; calcule agregações disponíveis, múltiplas e personalizadas; adicione estatísticas do grupo a cada linha com transform; atribua postos, filtre e faça amostragens dentro dos grupos; e use apply para as demais operações. Depois, discretize números com cut e qcut para análise por quantis e construa tabelas dinâmicas e tabulações cruzadas com totais e percentuais.

IntermediárioAula 5 de 8 do curso Curso de Análise de dados com Python

O que você vai aprender

  1. Explique o padrão dividir, aplicar e combinar, crie objetos GroupBy a partir de diferentes tipos de chaves e controle como o resultado agrupado é rotulado, ordenado e completado.
    • Explicar o padrão dividir, aplicar e combinar e o objeto GroupBy
      Descreva o que acontece quando o pandas agrupa um DataFrame, inspecione os grupos formados e selecione as colunas a resumir.
    • Agrupar por colunas, arrays, mapeamentos, funções e níveis do índice
      Escolha e combine chaves de agrupamento, desde uma ou várias colunas até chaves derivadas, mapeamentos, funções e níveis do índice.
    • Controlar as chaves dos grupos, a ordem e as chaves ausentes nos resultados
      Organize os resultados agrupados para uso posterior: chaves como índice ou colunas, saída ordenada, chaves ausentes e categorias não utilizadas e nomes claros.
  2. Reduza cada grupo a valores de resumo com agregações disponíveis, várias agregações em uma chamada e funções personalizadas, e interprete os resultados corretamente.
    • Usar corretamente os métodos de agregação disponíveis
      Calcule contagens, totais, médias, medidas de dispersão e outros resumos por grupo e saiba como eles tratam valores ausentes e colunas de texto.
    • Aplicar várias agregações de uma vez com agg
      Use agg com listas, dicionários e agregação nomeada para construir tabelas de resumo com nomes claros de colunas.
    • Escrever funções de agregação personalizadas
      Escreva suas próprias funções que reduzem um grupo a um valor, nomeie seus resultados e saiba quando um método disponível ou uma razão de somas é a melhor escolha.
  3. Adicione resultados dos grupos a cada linha, calcule valores acumulados e relativos dentro dos grupos, mantenha ou amostre grupos e linhas e use apply para operações que os outros métodos não conseguem expressar.
    • Adicionar estatísticas do grupo a cada linha com transform
      Use transform para difundir resultados dos grupos de volta às linhas originais, obtendo proporções, desvios, valores padronizados e preenchimento de dados ausentes por grupo.
    • Calcular totais acumulados, postos e variações dentro dos grupos
      Use métodos cumulativos, de atribuição de postos e de deslocamento que reiniciam em cada grupo e mantenha as linhas na ordem desejada.
    • Manter, remover ou amostrar linhas grupo a grupo
      Filtre grupos inteiros por uma condição, obtenha as primeiras, últimas ou maiores linhas de cada grupo e extraia amostras aleatórias dentro dos grupos.
    • Executar operações gerais por grupo com apply
      Use apply para operações por grupo que precisam de várias colunas ou retornam tabelas, preveja a forma do resultado e prefira métodos mais rápidos quando forem adequados.
  4. Transforme valores numéricos em categorias de intervalos com cut e qcut, calcule quantis e use os intervalos como chaves de agrupamento para análise por faixas e quantis.
    • Discretizar valores em intervalos com cut
      Use cut com limites explícitos ou um número de intervalos de classe de mesma amplitude, interprete a notação de intervalos e controle limites, rótulos e valores fora dos intervalos.
    • Criar intervalos com contagens iguais usando quantis e qcut
      Calcule quantis, crie intervalos baseados em quantis com qcut, compare-os com intervalos de mesma amplitude e trate empates.
    • Comparar grupos definidos por intervalos e quantis
      Use a saída de cut e qcut como chave de agrupamento para análise por faixas e quantis, mantenha intervalos vazios quando necessário e interprete os resultados com cuidado.
  5. Construa tabelas de resumo de dupla entrada com pivot_table e crosstab, adicione totais, converta contagens em proporções e escolha a tabela que responde à pergunta.
    • Construir tabelas dinâmicas com pivot_table
      Resuma valores por chaves de linha e coluna com pivot_table, escolha a função de agregação e adicione valores de preenchimento e totais.
    • Contar e comparar categorias com crosstab
      Construa tabelas de frequências de duas variáveis categóricas com crosstab, adicione totais, converta contagens em proporções por linha, por coluna ou globais e escolha a proporção que responde à pergunta.

Guia de estudo de Agrupamento e agregação com pandas

5 capítulos

1

Dividir dados em grupos com groupby

A análise por grupos começa com uma pergunta como “Quantas unidades cada região vendeu?”. Você escolhe as chaves que definem um grupo, seleciona os valores a analisar e decide qual deve ser a forma da resposta. As mesmas linhas podem servir para calcular totais regionais, comparar produtos ou combinar os dois. Entender chaves, índices e categorias ausentes facilita a inspeção e o uso desses resultados em um relatório.

1.1 Explicar o padrão dividir, aplicar e combinar e o objeto GroupBy

Um grupo contém linhas com o mesmo valor de chave. Se a chave for region, todos os pedidos de North pertencerão a um grupo, mesmo que estejam espalhados pela tabela. Dividir, aplicar e combinar significa identificar esses grupos, realizar a mesma operação dentro de cada um e reunir os resultados.

Comece pelos dados dos pedidos

Os exemplos usam pandas 3 com import pandas as pd e NumPy como np. Crie a tabela de pedidos de bebidas:

sales = pd.DataFrame({
    "region": ["North", "South", "North", "East", "South", "East", "North", "South"],
    "product": ["tea", "tea", "coffee", "coffee", "coffee", "tea", "tea", "coffee"],
    "units": [10, 4, 7, 5, 9, 3, 6, 8],
    "revenue": [30, 12, 28, 20, 36, 9, 18, 32]
})

A receita não tem unidade monetária aqui. O chá tem receita de 3 por unidade e o café, de 4 por unidade. Os rótulos de linha padrão vão de 0 a 7.

De um objeto GroupBy a uma resposta

sales.groupby("region") retorna um objeto GroupBy, que contém as informações de agrupamento. Ele não é uma tabela de resumo. Escolha uma coluna e chame um método para calcular um resultado:

g = sales.groupby("region")
totals = g["units"].sum()

East contém as linhas 3 e 5, então seu total é 5 + 3 = 8. North contém as linhas 0, 2 e 6, resultando em 10 + 7 + 6 = 23. South contém as linhas 1, 4 e 7, resultando em 4 + 9 + 8 = 21. O pandas combina esses valores em uma Series chamada units, com os nomes das regiões como índice. Os totais somam 52, o total da coluna original.

A ordem padrão da saída é East, North, South porque as chaves dos grupos são ordenadas. sales.groupby("region", sort=False) usa a ordem da primeira ocorrência: North, South, East. Nenhuma das opções ordena as observações dentro de um grupo ou altera sales.

Inspecione e selecione

g.ngroups é 3. g.size() informa 2, 3 e 3 linhas para East, North e South. g.groups associa chaves a rótulos de linha, e g.get_group("North") retorna as três linhas de North. Você pode inspecionar um grupo por vez:

for name, group in g:
    print(name, group["units"].tolist())

A iteração ajuda a inspecionar ou exportar grupos. Para uma estatística, um método de grupo disponível evita que você escreva um laço Python e colete os resultados.

Selecionar g["units"] produz um SeriesGroupBy; sua soma é uma Series. Selecionar g[["units"]] produz um DataFrameGroupBy; sua soma é um DataFrame de uma coluna. Selecione g[["units", "revenue"]] quando precisar das duas colunas numéricas.

Escolha a forma da saída

Uma agregação como sum fornece um valor de resumo por grupo e coluna. Uma transformação fornece um valor para cada linha de entrada, como a participação de cada pedido no total de sua região. Uma filtragem mantém linhas ou grupos selecionados. O método geral apply trata resultados de grupos menos regulares.

A filtragem sales[sales["region"] == "North"] recupera as linhas de uma região. O agrupamento permite processar todas as regiões com a mesma operação.

Principais conclusões

  • As chaves de agrupamento determinam quais linhas pertencem ao mesmo grupo.
  • Um objeto GroupBy precisa de uma operação antes de produzir um resultado.
  • Escolha agregação, transformação ou filtragem de acordo com a saída necessária.
  • O agrupamento preserva a tabela original e a ordem das linhas dentro de cada grupo.

1.2 Agrupar por colunas, arrays, mapeamentos, funções e níveis do índice

As chaves podem vir de colunas, cálculos ou do índice das linhas. A pergunta importante é qual valor cada linha recebe como chave. Linhas com a mesma combinação de chaves são processadas juntas.

Use várias colunas

Passe uma lista de nomes de colunas para agrupar por combinações:

pair_totals = sales.groupby(["region", "product"])["units"].sum()

O resultado tem um MultiIndex de dois níveis. Suas entradas são East e coffee 5, East e tea 3, North e coffee 7, North e tea 16, South e coffee 17 e South e tea 4. North e tea combinam os dois pedidos de chá, com 10 e 6 unidades. Agrupar apenas por região também incluiria o pedido de café de North.

pair_totals.unstack() move o nível interno product para as colunas. As linhas são regiões, e as colunas são coffee e tea. Uma combinação ausente torna-se NaN; unstack(fill_value=0) pode representá-la como zero quando essa ausência significa nenhuma unidade.

Use uma lista para vários nomes de colunas. groupby(("region", "product")) trata a tupla como um único rótulo de coluna e procura uma coluna com essa tupla como nome.

Derive uma chave dos valores

Uma Series booleana pode dividir pedidos por tamanho sem adicionar uma coluna:

sales.groupby(sales["units"] >= 7)["revenue"].sum()

O grupo True contém as unidades 10, 7, 9 e 8; sua receita é 126. O grupo False contém os outros quatro pedidos e tem receita 59. O teste cria rótulos de grupo; ele não remove os pedidos menores.

Um mapeamento pode combinar regiões em zonas:

zones = {"North": "Zone 1", "East": "Zone 1", "South": "Zone 2"}
zone_key = sales["region"].map(zones)
sales.groupby(zone_key)["units"].sum()

Zone 1 recebe as 23 unidades de North e as 8 de East, totalizando 31. Zone 2 recebe as 21 de South. Mapeie a coluna primeiro: um dicionário passado diretamente a groupby mapeia rótulos do índice, não valores de região.

Agrupe usando o índice

Uma função passada como chave também recebe rótulos do índice. Para um estoque indexado por códigos de produto, a primeira letra pode identificar a família do produto:

stock = pd.Series([12, 8, 5, 9, 4],
                  index=["T01", "T02", "C01", "C02", "C03"])
stock.groupby(lambda code: code[0]).sum()

O total de C é 18 e o de T é 20. Para um MultiIndex existente, pair_totals.groupby(level="product").sum() reagrupa pelo nível nomeado do índice, produzindo coffee 29 e tea 23.

Verifique o alinhamento antes de agrupar

Uma chave em array do NumPy fornece rótulos por posição e deve ter um elemento por linha. Uma chave em Series é alinhada pelo rótulo do índice. Se seus rótulos cobrirem apenas as linhas 0 e 1, as outras linhas receberão chaves ausentes e serão excluídas pelo comportamento padrão de agrupamento. Uma Series reordenada ainda pode agrupar corretamente quando seus rótulos correspondem aos das linhas; substituí-la por seus valores muda a operação para correspondência por posição.

Principais conclusões

  • Use uma lista de nomes de colunas para agrupar por combinações.
  • Uma Series de chaves é alinhada pelo rótulo do índice; um array fornece valores por posição.
  • Mapeie os valores da coluna antes de agrupar quando um dicionário descrever esses valores.
  • Funções passadas como chaves recebem rótulos do índice.
  • Use level para níveis do índice e unstack para mover um nível do índice para as colunas.
  • Uma chave booleana separa linhas em grupos baseados em uma condição sem remover nenhum dos grupos.

1.3 Controlar as chaves dos grupos, a ordem e as chaves ausentes nos resultados

Um cálculo por grupos tem duas partes a inspecionar: os valores e os rótulos ao redor deles. O pandas permite escolher onde as chaves aparecem, como os grupos são ordenados e se chaves ausentes ou não utilizadas aparecem no relatório.

Mantenha as chaves no índice ou em colunas

Por padrão, as chaves tornam-se o índice do resultado:

sales.groupby("region")["revenue"].sum()

Essa Series tem East 29, North 76 e South 80. Para um relatório sem índice hierárquico, use:

report = sales.groupby("region", as_index=False)["revenue"].sum()

report tem colunas comuns region e revenue e um novo índice inteiro. Chamar .reset_index() na Series original produz a mesma disposição. Com várias chaves, ele converte cada nível do MultiIndex em uma coluna. unstack() tem outra finalidade: move um nível do índice para as colunas de uma grade.

Um resultado em Series mantém o nome da coluna selecionada. Use .rename("total_revenue") para dar um nome mais claro à Series ou .to_frame("total_revenue") para obter um DataFrame de uma coluna. A agregação nomeada pode fornecer nomes descritivos às colunas durante o cálculo.

Ordene chaves ou classifique valores

sort=True ordena as chaves, então a ordem alfabética das regiões continua sendo East, North, South, embora South tenha a maior receita. Para classificar os totais, ordene o resultado:

sales.groupby("region")["revenue"].sum().sort_values(ascending=False)

A saída é South 80, North 76, East 29. Use sort=False para manter as chaves na ordem da primeira ocorrência e evitar uma ordenação desnecessária em um conjunto de dados grande. Isso não ordena as linhas dentro dos grupos.

Considere chaves ausentes

O padrão dropna=True exclui linhas com chave de grupo ausente. Adicione um pedido com 5 unidades, mas sem região: a coluna inteira de unidades passa a totalizar 57, enquanto os totais dos grupos ainda somam 52. A linha omitida não tem uma região nomeada.

sales.groupby("region", dropna=False)["units"].sum()

Na tabela ampliada, isso adiciona um grupo de chave ausente que totaliza 5. Chaves ausentes determinam se uma linha entra em um grupo; valores ausentes determinam o que uma agregação conta ou calcula dentro de um grupo. São decisões distintas.

Mostre categorias não utilizadas quando necessário

Uma coluna categórica region pode listar East, North, South e West mesmo quando não há pedidos em West. Desde o pandas 3.0, observed=True é o padrão e mostra apenas categorias presentes nos dados. Com observed=False, West também aparece: sua soma e contagem são 0, enquanto sua média é NaN.

Escolha essa configuração explicitamente quando um relatório precisar mostrar as mesmas categorias todas as vezes. Uma categoria não utilizada e uma chave ausente são diferentes: observed trata valores categóricos declarados; dropna trata valores de chave ausentes.

as_index e sort definem a forma dos resultados de agregação. Transformações e filtragens como head, nth e filter mantêm os índices das linhas de entrada. Em um relatório de somas, comparar a soma dos totais dos grupos com o total da coluna original pode revelar chaves excluídas ou um filtro anterior.

Principais conclusões

  • as_index=False coloca as chaves de agregação em colunas comuns.
  • sort ordena chaves; sort_values classifica valores calculados.
  • dropna=False mantém um grupo para chaves ausentes.
  • observed=False inclui valores categóricos não utilizados.
2

Resumir cada grupo com agregações

Uma tabela de resumo transforma muitas observações em algumas medidas úteis. Contagens, totais, médias e medidas de dispersão respondem a perguntas diferentes, mesmo quando usam os mesmos grupos. Você escolherá funções disponíveis adequadas, reunirá vários resultados em uma chamada e escreverá uma função personalizada quando necessário. Valores ausentes e tamanhos desiguais de grupos são relevantes: uma tabela organizada ainda pode responder à pergunta errada.

2.1 Usar corretamente os métodos de agregação disponíveis

Uma agregação reduz cada grupo a um valor de resumo para cada coluna selecionada. Escolha a medida de acordo com a pergunta: uma contagem de linhas, um total, uma média ou uma medida de variação descreve uma característica diferente dos dados.

Selecione a estatística

Os métodos comuns incluem sum, prod, mean, median, min, max, count, size, nunique, std, var, first, last e quantile. Uma chamada direta como .mean() e .agg("mean") solicitam a média de grupo do pandas. nunique() conta valores distintos não ausentes por padrão.

sales.groupby("product")["revenue"].agg(["mean", "median"])

As receitas de café são 28, 20, 36 e 32. Sua média é 29; ordená-las fornece os valores centrais 28 e 32, então sua mediana é 30. As receitas de chá são 30, 12, 9 e 18. Sua média é 17,25 e sua mediana é 15. O pedido grande de chá de 30 eleva a média acima da mediana.

Conte linhas ou valores registrados

size() conta linhas. count() conta valores não ausentes em cada coluna selecionada. Se as unidades estiverem ausentes na linha 2 de North e na linha 5 de East, os tamanhos continuam East 2, North 3, South 3, mas as contagens de unidades são 1, 2 e 3. Assim, colunas diferentes podem ter contagens diferentes dentro do mesmo grupo.

A maioria das reduções numéricas ignora valores ausentes. As unidades restantes de North, 10 e 6, têm média 8, usando dois valores registrados. Dividir sua soma pelas três linhas produziria a média errada. Um grupo com todos os valores ausentes tem soma 0 por padrão, mas média NaN. Desde o pandas 3.0, reduções como sum e mean aceitam skipna=False para retornar um resultado ausente quando um grupo contém um valor ausente.

Interprete a dispersão e os resumos combinados

std() e var() usam estatísticas amostrais, com ddof=1: o divisor é um a menos que o número de observações registradas. Os valores 1 e 3 têm desvio padrão amostral de aproximadamente 1,414. Um grupo com apenas o valor 5 tem desvio padrão amostral NaN.

describe() reúne contagem, média, desvio padrão, mínimo, quartis e máximo. Para as receitas de South 12, 36 e 32, a média é aproximadamente 26,67 e a mediana é 32. A coluna 50% é a mediana.

Controle as colunas e a ordem das linhas

Selecionar colunas numéricas evita tentar calcular a média de texto:

sales.groupby("region")[["units", "revenue"]].mean()

Um .mean() na tabela inteira falha na coluna de texto product; numeric_only=True é outra solução. Um .sum() na tabela inteira pode concatenar texto, produzindo "coffeetea" para East, o que não é um resumo útil de produtos.

first() e last() escolhem o primeiro e o último valor não ausente por coluna na ordem atual das linhas. Eles podem obter valores de linhas diferentes. Use nth(0) para recuperar a primeira linha real, incluindo seus valores ausentes; ordene primeiro quando “primeiro” significar o mais antigo.

Tamanhos desiguais dos grupos também afetam a interpretação. A média das receitas médias regionais é aproximadamente 22,17, mas a média geral é 185 dividido por 8, ou 23,125. Atribuir o mesmo peso a cada média regional dá ao grupo East, de duas linhas, a mesma influência que a cada grupo de três linhas.

Principais conclusões

  • size conta linhas; count conta valores registrados.
  • A maioria das reduções ignora valores ausentes; uma soma de valores todos ausentes é zero por padrão.
  • std e var usam o divisor amostral por padrão.
  • Selecione as colunas numéricas relevantes antes de agregar.
  • first pode ignorar valores ausentes; nth(0) seleciona uma linha real.
  • Grupos de tamanhos desiguais precisam de pesos adequados ao combinar suas médias.

2.2 Aplicar várias agregações de uma vez com agg

Um relatório útil muitas vezes precisa de várias medidas dos mesmos grupos. agg, abreviação de aggregate, permite solicitar essas medidas juntas e controlar como suas colunas de saída são nomeadas.

Aplique várias funções a uma coluna
sales.groupby("region")["revenue"].agg(["sum", "mean", "max"])

East fornece 29, 14,5 e 20; North fornece 76, aproximadamente 25,33 e 30; South fornece 80, aproximadamente 26,67 e 36. Cada linha representa uma região, enquanto os nomes das funções tornam-se nomes de colunas.

Uma lista aplicada a várias colunas de valores produz colunas hierárquicas:

result = sales.groupby("region")[["units", "revenue"]].agg(["sum", "mean"])

Os quatro rótulos de coluna são os pares ("units", "sum"), ("units", "mean"), ("revenue", "sum") e ("revenue", "mean"). O primeiro nível identifica a coluna de entrada; o segundo identifica o cálculo. Esses são níveis das colunas, separados de quaisquer níveis de agrupamento no índice das linhas.

Atribua funções a colunas específicas

Um dicionário seleciona as colunas de entrada e suas funções:

sales.groupby("region").agg({
    "units": "sum",
    "revenue": ["mean", "max"]
})

Isso solicita o total de unidades, mas a média e o máximo da receita. Colunas ausentes do dicionário não aparecem. Funções diferentes podem fazer sentido para medidas diferentes; somar uma quantidade e calcular a média de uma taxa não são escolhas intercambiáveis.

Nomeie as saídas diretamente

A agregação nomeada dá a cada resultado um nome explícito:

report = sales.groupby("region").agg(
    total_units=("units", "sum"),
    avg_revenue=("revenue", "mean")
)

Cada palavra-chave nomeia uma coluna de saída. Sua tupla contém a coluna de origem e a função. total_units é 8, 23 e 21; avg_revenue é 14,5, aproximadamente 25,33 e aproximadamente 26,67. pd.NamedAgg(column="units", aggfunc="sum") é uma alternativa auxiliar para especificar a origem e a função.

Após selecionar uma única Series, use palavras-chave de função sem tuplas de coluna de origem:

sales.groupby("region")["units"].agg(total="sum", most="max")

Os totais são 8, 23 e 21, e os máximos são 5, 10 e 9. Um dicionário como {"total": "sum"} nessa Series selecionada gera um SpecificationError; ele não é a forma de dicionário usada em um DataFrame.

Uma lista de pares nomeados também funciona em uma coluna selecionada: .agg([("average", "mean"), ("spread", "std")]). Se você já tiver colunas MultiIndex feitas de rótulos em strings, result.columns = ["_".join(col) for col in result.columns] as achata, produzindo nomes como units_sum.

Escolha a função deliberadamente

Nomes em strings usam os cálculos de grupo disponíveis no pandas. Desde o pandas 3.0, uma função do NumPy ou Python passada a agg é chamada conforme fornecida. Para as receitas de East 20 e 9, "std" usa o divisor amostral e fornece aproximadamente 7,78, enquanto np.std usa o divisor populacional e fornece 5,5.

Principais conclusões

  • Uma lista aplica várias funções às colunas selecionadas.
  • Um dicionário atribui funções a determinadas colunas de entrada.
  • A agregação nomeada usa nomes de saída com pares (column, function).
  • Nomes de funções em strings e objetos chamáveis do NumPy podem usar padrões estatísticos diferentes.

2.3 Escrever funções de agregação personalizadas

Uma agregação personalizada expressa um resumo que um método disponível por nome não fornece. Sua função recebe os valores de um grupo como uma Series e deve reduzi-los a um resultado útil.

Escreva e passe a função
def value_range(s):
    return s.max() - s.min()

sales.groupby("region")["revenue"].agg(value_range)

A amplitude de East é 20 menos 9, ou 11. A de North é 30 menos 18, ou 12. A de South é 36 menos 12, ou 24. Passe a própria função value_range; value_range() a chamaria imediatamente, sem a Series do grupo de que ela precisa.

Uma lambda é adequada para um cálculo curto:

sales.groupby("region")["revenue"].agg(
    share_20=lambda s: (s >= 20).mean()
)

Valores booleanos funcionam como 1 para True e 0 para False, então sua média é a proporção que atende à condição. East tem um pedido qualificado entre dois, ou 0,5. North e South têm dois entre três cada um, ou aproximadamente 0,667. Nomear o resultado torna seu significado mais claro que um rótulo automático de lambda. Listas com várias funções rotulam lambdas como <lambda_0>, <lambda_1> e assim por diante; uma única lambda em uma lista é rotulada como <lambda>.

Prepare colunas para usar reduções rápidas

Uma função Python é executada uma vez para cada grupo. Quando há muitos grupos, as reduções disponíveis costumam ser mais rápidas. O cálculo da proporção pode ser reescrito criando primeiro sua coluna booleana:

sales.assign(big=sales["revenue"] >= 20).groupby("region")["big"].mean()

A comparação é executada na coluna inteira, deixando o cálculo das médias dos grupos para o pandas.

Combine duas colunas por meio de seus totais

Uma função agg trata uma coluna por vez. Para obter a receita média por unidade, primeiro resuma ambas as colunas:

totals = sales.groupby("region")[["units", "revenue"]].sum()
avg_price = totals["revenue"] / totals["units"]

Os resultados são East 29/8 = 3,625, North 76/23 ≈ 3,304 e South 80/21 ≈ 3,810. Cada unidade recebe o mesmo peso. Calcular a média dos preços dos pedidos fornece East 3,5, North aproximadamente 3,333 e South aproximadamente 3,667, porque cada pedido recebe o mesmo peso, independentemente de seu tamanho. Decida se a pergunta se refere a uma unidade típica ou a um pedido típico antes de escolher a fórmula.

Deixe claros o valor de retorno e os dados ausentes

Uma função que retorna os dois menores valores não cria duas linhas de resumo comuns com agg; no pandas 3.1, lambda s: s.nsmallest(2) armazena um objeto semelhante a uma lista em cada célula. Use apply quando um grupo precisar retornar vários valores ou linhas.

A Series de entrada ainda contém valores ausentes. s.mean() os ignora, enquanto len(s) conta suas linhas. Se as unidades estiverem ausentes nas linhas 2 e 5, .agg(len) fornecerá os tamanhos dos grupos 2, 3 e 3, não as contagens de valores não ausentes 1, 2 e 3.

Argumentos adicionais podem vir depois da função: .agg("quantile", 0.9) fornece o percentil 90 de cada grupo. As receitas de East 9 e 20 fornecem 18,9 por interpolação linear. A chamada direta .quantile(0.9) é mais fácil de ler para essa única operação.

Principais conclusões

  • Passe uma função para agg sem chamá-la antes.
  • Uma agregação personalizada recebe a Series de um grupo e deve retornar um valor de resumo.
  • Médias booleanas fornecem proporções.
  • Uma razão de totais atribui pesos às unidades de modo diferente de uma média de razões por linha.
  • Prefira reduções disponíveis quando elas expressarem o cálculo.
  • Funções personalizadas devem tratar valores ausentes de forma intencional.
3

Transformar, filtrar e aplicar funções grupo a grupo

Um grupo pode fornecer contexto para cada linha original, além de um resumo separado. Um pedido pode receber o total de sua região, seu posto ou a variação em relação ao pedido anterior dessa região. Outras tarefas mantêm grupos selecionados ou retornam uma tabela de cada grupo. Escolher um método pela forma de sua saída torna esse trabalho mais claro e evita erros de alinhamento de índice ao adicionar um resultado aos dados originais.

3.1 Adicionar estatísticas do grupo a cada linha com transform

Um resumo tem uma linha por grupo, mas às vezes cada linha original precisa da estatística de seu grupo. transform retorna um resultado com o comprimento e o índice originais, adequado para uma nova coluna.

Difunda um total para as linhas corretas
g = sales.groupby("region")["revenue"]
regional_total = g.transform("sum")
sales["share"] = sales["revenue"] / regional_total

A Series de totais contém 76, 80, 76, 29, 80, 29, 76 e 80 na ordem original das linhas. O total de North, 76, é repetido apenas nas linhas de North. A linha 0 recebe a proporção 30/76 ≈ 0,395; a linha 3 de East recebe 20/29 ≈ 0,690. Dentro de cada região, essas proporções de receita somam 1.

Atribuir g.sum() diretamente não associaria o resultado às linhas. Seu índice contém nomes de regiões, enquanto sales tem rótulos de linha de 0 a 7. O pandas alinha pelo rótulo do índice, então a coluna atribuída fica com valores ausentes. Use transform ou una explicitamente um resumo por region.

Compare uma linha com seu grupo

Subtrair a média do grupo fornece um desvio em relação à média do grupo:

x = sales["revenue"]
deviation = x - g.transform("mean")

A linha 0 de North está aproximadamente 4,67 acima da média de seu grupo, de aproximadamente 25,33. A linha 1 de South está aproximadamente 14,67 abaixo da média de seu grupo, de aproximadamente 26,67. Cada comparação usa a própria região da linha, não a média da tabela inteira.

Um escore z divide esse desvio pelo desvio padrão do grupo:

z = (x - g.transform("mean")) / g.transform("std")

Para a linha 0 de North, o desvio padrão amostral é aproximadamente 6,43 e o escore z, aproximadamente 0,73. A linha 3 de East tem escore z de aproximadamente 0,71, então está acima da média de sua região, embora sua receita de 20 esteja abaixo da média geral de 23,125. Um desvio padrão zero ou valores registrados insuficientes deixam o escore padronizado indefinido.

Preencha um valor ausente com dados de seu grupo

Suponha que as unidades nas linhas 2 e 5 estejam ausentes. As unidades registradas de North são 10 e 6, com média 8; o único valor de unidades registrado em East é 5.

with_missing = sales.copy()
with_missing.loc[[2, 5], "units"] = np.nan
means = with_missing.groupby("region")["units"].transform("mean")
filled_units = with_missing["units"].fillna(means)

Nessa tabela modificada, a linha 2 recebe 8 e a linha 5 recebe 5. Os valores existentes permanecem inalterados. Quando os grupos têm valores típicos diferentes, suas próprias médias podem fornecer substituições mais realistas que uma única média geral. Um grupo sem valores registrados continua sem uma média para fornecer.

Entenda uma transformação personalizada

Uma função fornecida a transform pode retornar um escalar, que o pandas repete dentro do grupo, ou uma Series indexada pelas linhas do grupo. Por exemplo, g.transform(lambda s: s - s.mean()) calcula os mesmos desvios que a média disponível seguida de subtração, mas invoca Python para cada grupo.

Uma Series mais curta retornada é associada por rótulo. g.transform(lambda s: s.head(1)) fornece apenas o valor da primeira linha de cada grupo; as outras linhas recebem NaN. Mantenha os cálculos por linha no índice original quando o resultado for atribuído de volta à tabela.

Principais conclusões

  • transform retorna resultados alinhados às linhas de entrada.
  • Divida cada valor pelo total transformado de seu grupo para obter proporções dentro do grupo.
  • Use médias e desvios padrão dos grupos para comparações dentro dos grupos.
  • O preenchimento por grupo usa a estatística do próprio grupo da linha com valor ausente.

3.2 Calcular totais acumulados, postos e variações dentro dos grupos

Cálculos acumulados e comparações com observações anteriores precisam tanto de um grupo quanto de uma ordem de linhas. O agrupamento impede que um cálculo passe para outro grupo; a ordenação determina o que significam “anterior” ou “até agora”.

Acumule dentro de cada grupo

Suponha que as linhas dos pedidos já estejam em ordem cronológica:

sales["running_units"] = sales.groupby("region")["units"].cumsum()

As unidades de North 10, 7 e 6 produzem totais acumulados 10, 17 e 23. As de South 4, 9 e 8 produzem 4, 13 e 21. As de East 5 e 3 produzem 5 e 8. Esses valores permanecem associados aos rótulos originais das linhas, então a saída completa na ordem das linhas é 10, 4, 17, 5, 13, 8, 23 e 21.

Sem groupby, sales["units"].cumsum() forneceria um único total para todos os pedidos: 10, 14, 21, 26, 35, 38, 44 e 52. O cálculo agrupado reinicia para cada região. Métodos relacionados incluem cumprod, cummax e cummin para produtos, máximos e mínimos acumulados.

cumcount() conta posições dentro dos grupos a partir de zero. Aqui ele fornece 0, 0, 1, 0, 1, 1, 2 e 2. Some 1 para obter os números do primeiro, segundo e terceiro pedidos dentro de cada região.

Atribua postos aos valores sem reorganizar as linhas
sales.groupby("region")["revenue"].rank(ascending=False)

A maior receita recebe o posto 1 em sua própria região: linha 0 de North, linha 4 de South e linha 3 de East. A saída mantém o índice de entrada; atribuir postos não move as maiores linhas para o topo da tabela.

Por padrão, valores empatados recebem a média de seus postos. Se dois valores empatarem em primeiro lugar, ambos receberão 1,5 e o próximo receberá 3. method="min" dá 1 aos valores empatados e mantém 3 para o próximo. method="dense" dá 1 aos valores empatados e 2 ao próximo. Escolha uma regra de desempate adequada à interpretação dos postos.

Compare valores consecutivos
g = sales.groupby("region")["units"]
previous = g.shift(1)
change = g.diff()
relative_change = g.pct_change()

Os valores anteriores de North são ausente, 10 e 7. Suas diferenças são ausente, −3 e −1. Suas variações relativas são ausente, −0,3 e aproximadamente −0,143: a diferença é dividida pelo valor anterior. pct_change() retorna uma fração, então −0,3 significa uma redução de 30%, não de 0,3%.

A primeira observação de cada grupo não tem observação anterior e recebe NaN. Um shift() aplicado à coluna inteira usaria a linha anterior de toda a tabela, que poderia pertencer a outra região.

Antes desses cálculos ordenados, ordene as linhas pela coluna que define a sequência, como uma data ou número de evento. groupby(sort=True) ordena apenas as chaves dos grupos; ele não coloca as observações em ordem cronológica. A atribuição de postos compara valores e trata empates independentemente da cronologia, enquanto cálculos acumulados e com defasagem dependem da sequência escolhida.

Principais conclusões

  • Ordene as observações antes de cálculos que dependem de sua sequência.
  • Métodos cumulativos agrupados reiniciam dentro de cada grupo.
  • cumcount começa em zero; some 1 para obter números de sequência usuais.
  • Escolha explicitamente a direção dos postos e o método para empates quando necessário.
  • shift, diff e pct_change comparam observações dentro do mesmo grupo.
  • pct_change retorna uma fração que pode ser multiplicada por 100 para obter um percentual.

3.3 Manter, remover ou amostrar linhas grupo a grupo

Manter um grupo e resumi-lo são operações diferentes. Um filtro de grupos usa uma condição aplicada ao grupo inteiro para decidir quais linhas originais permanecem; métodos de seleção de linhas escolhem observações específicas de cada grupo.

Mantenha grupos inteiros
sales.groupby("region").filter(lambda g: len(g) >= 3)

North e South têm três pedidos cada um, enquanto East tem dois. O resultado contém as linhas 0, 1, 2, 4, 6 e 7, na ordem original e com seus rótulos originais. Ele não retorna duas linhas de resumo regional.

A condição deve produzir um valor booleano para cada grupo. lambda g: g["units"] > 5 produz uma Series booleana e é inválida para filter. Reduza essa condição com all() ou any():

sales.groupby("region").filter(lambda g: (g["units"] > 5).all())

Apenas North passa, porque todos os seus valores de unidades, 10, 7 e 6, são maiores que 5. Usar any() também mantém South, porque pelo menos um de seus pedidos supera 5.

Um tamanho de grupo transformado fornece uma máscara mais rápida, alinhada às linhas, para a primeira tarefa:

sizes = sales.groupby("region")["units"].transform("size")
sales[sizes >= 3]

Essa máscara pode ser combinada com outras condições de linha usando & e |. Filtrar sales.groupby("region")["revenue"].sum() manteria entradas de resumo, não os pedidos originais.

Obtenha linhas por posição

head(n) obtém as primeiras n linhas por grupo, tail(n) as últimas n e nth(k) a linha na posição k, contando a partir de zero. sales.groupby("region").head(1) retorna as linhas 0, 1 e 3: o primeiro pedido observado de cada região. Valores ausentes não fazem head(1) procurar uma linha posterior sem valor ausente.

Para selecionar o maior pedido por região, ordene primeiro pela receita:

sales.sort_values("revenue", ascending=False).groupby("region").head(1)

As linhas selecionadas são a linha 4 de South com receita 36, a linha 0 de North com 30 e a linha 3 de East com 20. A ordenação controla qual observação vem primeiro; a operação por grupo obtém então essa primeira linha. Com rótulos de linha únicos, sales.loc[sales.groupby("region")["revenue"].idxmax()] recupera os mesmos máximos por seus rótulos.

Faça amostragens dentro de cada grupo
sales.groupby("region").sample(n=1, random_state=0)

Isso extrai um pedido de cada região. Definir random_state torna reproduzíveis as execuções repetidas sobre os mesmos dados. Uma amostra do DataFrame inteiro poderia deixar uma região de fora, mesmo que ela tivesse três linhas no total.

Use frac=0.5 para extrair aproximadamente metade das linhas de cada grupo. O tamanho da amostra por grupo é arredondado: com frac=0.2, as duas linhas de East produzem 0,4 linha, arredondada para zero. Use n=1 explicitamente quando cada grupo não vazio tiver de contribuir com uma observação. O tamanho solicitado da amostra deve ser viável para os grupos nas configurações de amostragem escolhidas.

Principais conclusões

  • filter retorna as linhas originais dos grupos cuja condição booleana única é satisfeita.
  • head, tail e nth selecionam linhas na ordem atual.
  • Ordene antes de head ao selecionar os maiores valores.
  • A amostragem por grupo com n=1 representa cada grupo não vazio; uma fração pequena pode omitir grupos pequenos.

3.4 Executar operações gerais por grupo com apply

apply permite que uma função examine um grupo inteiro e retorne um escalar, uma Series ou um DataFrame. Essa flexibilidade é útil quando colunas precisam interagir ou o resultado contém várias linhas. Ela também torna a forma do resultado menos previsível que com agg ou transform.

Use várias colunas juntas
def price_per_unit(g):
    return g["revenue"].sum() / g["units"].sum()

sales.groupby("region").apply(price_per_unit)

A função recebe as linhas de uma região. Ela retorna um valor, então o pandas combina as saídas em uma Series indexada por região: East 3,625, North aproximadamente 3,304 e South aproximadamente 3,810. Uma razão de somas agrupadas disponíveis produz o mesmo resultado com menos trabalho em Python. np.average(g["revenue"] / g["units"], weights=g["units"]) expressa a média ponderada equivalente.

Para uma estatística que envolve duas colunas, como a correlação entre horas de estudo e nota dentro de cada grupo de turma, apply pode passar as duas Series de cada grupo para .corr().

Preveja como as saídas são combinadas

Uma função que retorna uma Series com os mesmos rótulos para todos os grupos cria uma linha de tabela por grupo:

sales.groupby("region").apply(
    lambda g: pd.Series({
        "orders": len(g),
        "avg_price": g["revenue"].sum() / g["units"].sum()
    })
)

As colunas são orders e avg_price. As contagens aparecem como 2,0, 3,0 e 3,0 porque a Series retornada também contém um preço de ponto flutuante. Se as Series retornadas usarem rótulos diferentes, o pandas as empilhará em uma Series mais longa, adicionando as chaves dos grupos como nível externo do índice.

Um DataFrame por grupo é empilhado em um DataFrame maior:

def top(g, n=2, col="revenue"):
    return g.sort_values(col, ascending=False).head(n)

sales.groupby("region").apply(top)

As linhas são East 3 e 5, North 0 e 2 e South 4 e 7. Cada grupo é ordenado independentemente. Argumentos adicionais vêm depois da função: .apply(top, n=1, col="units") altera a seleção para o pedido com mais unidades.

Controle chaves e alinhamento

Para essas linhas retornadas, o padrão group_keys=True adiciona a região como nível externo do índice. sales.groupby("region", group_keys=False).apply(top) mantém apenas os rótulos originais das linhas. Ele ainda reúne os resultados grupo a grupo; não garante a ordem das linhas da tabela de entrada.

Desde o pandas 3.0, o DataFrame passado a um apply agrupado exclui as colunas de agrupamento. Neste exemplo, ele tem product, units e revenue, mas não region. Leia a chave do grupo atual em g.name quando a função precisar dela.

Use o método mais específico quando for adequado

apply executa código Python para cada grupo e infere como reunir a saída. Use agg para valores de resumo por coluna, transform para resultados alinhados a cada linha de entrada e filter para decisões de manter ou remover grupos inteiros.

Por exemplo, subtrair a média de cada região usando apply em uma Series selecionada retorna diferenças sob um MultiIndex de região e linha. transform retorna as diferenças com o índice original, prontas para atribuição como uma coluna.

Principais conclusões

  • apply pode usar várias colunas e retornar resultados de formas flexíveis.
  • Um resultado escalar fornece uma Series; Series com rótulos correspondentes fornecem uma tabela.
  • Resultados em DataFrame são empilhados, geralmente com chaves dos grupos no índice.
  • Desde o pandas 3.0, apply agrupado exclui as colunas de agrupamento de cada grupo de entrada.
  • Prefira agg, transform ou filter quando a saída que eles fornecem for adequada.
  • Use group_keys para controlar os rótulos externos dos grupos, não para restaurar a ordem original das linhas.
4

Discretizar dados numéricos e analisar grupos por intervalos e quantis

Valores numéricos podem se tornar rótulos úteis de grupos quando você os divide em intervalos. Limites fixos permitem comparar as mesmas faixas entre relatórios; quantis permitem comparar as partes inferior e superior de uma amostra. Você criará os dois tipos de intervalos, inspecionará limites e empates e resumirá outra variável dentro deles. Contagens ao lado dos resumos ajudam a perceber quantos dados sustentam cada comparação.

4.1 Discretizar valores em intervalos com cut

A discretização em intervalos substitui valores numéricos por categorias de intervalos. Use-a quando um relatório precisar de faixas significativas, como faixas de notas, em vez de um grupo separado para cada número.

Defina limites explícitos
scores = pd.Series([42, 50, 55, 64, 68, 70, 73, 81, 85, 88, 97, 100])
bands = pd.cut(scores, [0, 50, 70, 85, 100])
bands.value_counts(sort=False)

Cinco limites definem quatro intervalos: (0, 50], (50, 70], (70, 85] e (85, 100]. Eles contêm 2, 4, 3 e 3 notas. Limites explícitos podem definir amplitudes desiguais porque descrevem fronteiras significativas.

Nessa notação, um parêntese exclui um extremo e um colchete o inclui. Com o padrão right=True, 50 pertence ao primeiro intervalo, 70 ao segundo, 85 ao terceiro e 100 ao quarto. Leia (50, 70] como “maior que 50 e no máximo 70”.

Trate os limites externos

Com esses limites explícitos, 0 é excluído do primeiro intervalo e 101 está além do último. Ambos recebem NaN. Use include_lowest=True para incluir um valor igual ao limite inferior. Valores abaixo do limite inferior ou acima do superior continuam sem intervalo atribuído.

Para intervalos fechados à esquerda, use right=False. Os mesmos limites definem então [0, 50), [50, 70), [70, 85) e [85, 100). Agora 50 passa para o segundo intervalo e 100 é excluído. As contagens do exemplo passam a ser 1, 4, 3 e 3, com uma atribuição de intervalo ausente. Um limite superior de 101 incluiria a nota 100 no último intervalo fechado à esquerda.

Alterar o fechamento muda a inclusão em um limite. Verifique um mínimo, um limite interno e um máximo antes de usar as faixas em um relatório.

Adicione rótulos legíveis
bands = pd.cut(
    scores, [0, 50, 70, 85, 100],
    labels=["fail", "pass", "merit", "distinction"]
)

Forneça um rótulo para cada intervalo: quatro rótulos para cinco limites. A saída é um tipo categórico ordenado, então sua ordem é fail, pass, merit, distinction, não a ordem alfabética. labels=False retorna códigos de intervalo de 0 a 3 para os valores atribuídos.

value_counts() normalmente ordena por frequência. Use sort=False ou ordene o índice resultante para manter a sequência dos intervalos. Caso contrário, a faixa mais frequente pode aparecer primeiro e dificultar a leitura da distribuição.

Solicite amplitudes iguais ao pandas

Passar um inteiro solicita essa quantidade de intervalos de mesma amplitude:

bands, edges = pd.cut(scores, 4, retbins=True)

A faixa de 42 a 100 abrange 58, resultando em amplitudes de 14,5. Os limites internos são 56,5, 71,0 e 85,5. O pandas estende ligeiramente o extremo inferior desses intervalos fechados à direita, fornecendo um primeiro limite de 41,942 para incluir o mínimo. Neste caso, cada intervalo contém três notas; amplitudes iguais geralmente não produzem contagens iguais.

retbins=True retorna os limites reais, além das atribuições. Limites explícitos devem estar em ordem crescente: [0, 70, 50, 100] não pode definir a sequência pretendida de intervalos.

Principais conclusões

  • cut transforma valores numéricos em categorias de intervalos.
  • Por padrão, os intervalos excluem o limite esquerdo e incluem o direito.
  • Limites explícitos deixam valores fora da faixa sem atribuição.
  • include_lowest=True inclui o limite explícito inferior.
  • Um número inteiro de intervalos solicita amplitudes iguais, não contagens iguais.
  • Rótulos e contagens precisam manter a ordem desejada dos intervalos.
  • right=False altera qual extremo pertence a cada intervalo; verifique o máximo após mudar o fechamento.

4.2 Criar intervalos com contagens iguais usando quantis e qcut

Um quantil descreve uma posição em dados ordenados. A mediana é o quantil 0,5; quartis dividem a distribuição em quartos, decis em décimos e percentis em centésimos. qcut usa quantis amostrais como limites dos intervalos.

Calcule um quantil

Para as notas 42, 50, 55, 64, 68, 70, 73, 81, 85, 88, 97 e 100:

scores.quantile([0.25, 0.5, 0.75])

Os resultados são 61,75, 71,5 e 85,75. O pandas usa interpolação linear por padrão. Para o quantil 0,25, a posição contada a partir de zero é:

0,25(12−1)=2,75

A posição 2 contém 55 e a posição 3 contém 64. Avance três quartos da distância entre elas:

55+0,75(64−55)=61,75

Assim, um quantil amostral pode ficar entre valores observados. Ele não precisa ser igual a uma nota que alguém realmente recebeu.

Crie grupos de quantis
quartile = pd.qcut(scores, 4, labels=["Q1", "Q2", "Q3", "Q4"])

Essa amostra fornece três notas por grupo de quartil. Os limites internos são os três quartis calculados. O primeiro intervalo inclui o mínimo; a exibição do intervalo ajusta seu rótulo inferior para um valor ligeiramente abaixo de 42. Use labels=False para códigos de 0 a 3 ou retbins=True para recuperar os limites numéricos.

Uma lista de proporções controla as faixas de quantis. pd.qcut(x, [0, 0.1, 0.5, 0.9, 1]) separa os 10% inferiores, duas partes intermediárias divididas na mediana e os 10% superiores.

Escolha amplitudes ou contagens
MétodoO que define os limites?O que permanece comparável?
cut(x, n)Intervalos iguais na faixa observadaAmplitude numérica
cut(x, edges)Limites explícitos fornecidosAs faixas escolhidas
qcut(x, n)Quantis desta amostraContagens aproximadas de observações

Tempos de entrega de 5, 6, 7, 7, 8, 9, 10, 12, 15, 20, 35 e 60 minutos mostram a diferença. Três intervalos de mesma amplitude contêm 10, 1 e 1 observações. Três intervalos de quantis contêm 4 cada um, com limites internos de aproximadamente 7,67 e 13 minutos. Atrasos longos ampliam a faixa de intervalos de mesma amplitude, deixando a maioria das observações no primeiro intervalo.

Use limites fixos quando as mesmas faixas de tempo precisarem ser comparadas entre conjuntos de dados. Os limites dos quantis mudam quando a amostra muda.

Mantenha os empates visíveis

Para os valores 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 10 e 12, os limites dos quartis são 3,75, 6 e 8,25. Ambos os valores 6 pertencem ao mesmo intervalo, então as contagens são 3, 4, 2 e 3. A discretização com contagens iguais é aproximada quando há valores empatados.

Com muitos empates, os limites dos quantis podem coincidir. Para 1, 1, 1, 1, 1, 1, 2 e 3, solicitar quartis produz limites repetidos. duplicates="drop" remove limites duplicados e deixa apenas dois intervalos, com contagens 6 e 2. Atribuir postos primeiro com rank(method="first") pode forçar quatro grupos de mesmo tamanho, mas separa valores iguais conforme a ordem das linhas. Isso muda o significado de intervalos de valores para grupos baseados em postos com desempate.

Principais conclusões

  • Quantis podem ficar entre observações porque o pandas interpola valores.
  • qcut usa quantis amostrais para criar grupos com contagens aproximadamente iguais.
  • Use limites fixos em cut para faixas que precisam permanecer comparáveis entre conjuntos de dados.
  • Empates podem tornar desiguais as contagens dos intervalos de quantis ou produzir limites duplicados.
  • Remover limites duplicados reduz o número de intervalos; atribuir postos primeiro separa valores empatados.

4.3 Comparar grupos definidos por intervalos e quantis

Um rótulo de intervalo pode servir como chave de agrupamento. Isso permite perguntar como uma variável muda entre faixas de outra, como a nota média de prova entre faixas de horas de estudo. O resumo descreve as observações em cada faixa.

Construa um resumo por faixas

Crie os dados dos estudantes:

students = pd.DataFrame({
    "group": ["day", "evening", "day", "evening", "day", "evening", "day", "evening", "day", "day", "evening", "day"],
    "hours": [2, 3, 3, 5, 4, 6, 6, 8, 7, 9, 10, 12],
    "score": [42, 50, 55, 64, 68, 70, 73, 81, 85, 88, 97, 100]
})
hour_band = pd.cut(students["hours"], [0, 3, 6, 9, 12])
students.groupby(hour_band)["score"].agg(["count", "mean"])

As quatro faixas contêm 3, 4, 3 e 2 estudantes. Suas notas médias são 49, 68,75, aproximadamente 84,67 e 98,5. Na primeira faixa, as notas são 42, 50 e 55; sua média é 147/3 = 49. A contagem mostra quantas notas registradas sustentam cada média.

A Series de faixas tem uma entrada por estudante e o mesmo índice, então suas atribuições correspondem às linhas durante o agrupamento. A coluna numérica hours permanece disponível para outros cálculos.

Mantenha intervalos vazios quando um relatório precisar deles

Desde o pandas 3.0, observed=True é o padrão de agrupamento para chaves categóricas. Adicione um limite de 15 e a faixa não utilizada (12, 15] será omitida. observed=False a mantém com contagem 0 e média NaN. Zero estudantes é uma contagem; uma média zero sugeriria incorretamente notas observadas com média zero.

Os intervalos são categorias ordenadas, então a saída agrupada normal segue a ordem dos intervalos do menor para o maior. Rótulos nomeados mantêm a ordem atribuída aos seus intervalos.

Analise grupos de quantis e combinações
quartile = pd.qcut(students["hours"], 4,
                   labels=["Q1", "Q2", "Q3", "Q4"])
students.groupby(quartile)["score"].agg(["count", "min", "max", "mean"])

As contagens são 3, 4, 2 e 3, com notas médias 49, 68,75, 83 e 95. Os valores empatados de 6 explicam as contagens desiguais. Para comparar estudantes de day e evening dentro de cada quartil, agrupe por [quartile, "group"] e chame .mean().unstack(). As médias de Q1 são day 48,5 e evening 50; as de Q4 são day 94 e evening 97.

A direção da análise importa. Agrupar horas de estudo por faixas de notas responde a outra pergunta: as médias de horas para as faixas fail, pass, merit e distinction são 2,5, 4,5, 7 e aproximadamente 10,33.

Decida qual população define um quantil

Uma divisão das notas pela mediana geral usa 71,5. Uma divisão dentro de cada turma usa sua própria mediana: day 73 e evening 70.

within_class = students.groupby("group")["score"].transform(
    lambda s: pd.qcut(s, 2, labels=["lower", "upper"])
)

O estudante de day com nota 73 está acima da mediana geral, mas pertence à metade inferior dentro do grupo day. Ambos os rótulos estão corretos porque respondem a perguntas de comparação diferentes.

Uma média crescente entre faixas de horas é uma associação. Estudantes em faixas diferentes podem diferir de outras maneiras, então a tabela, por si só, não permite estabelecer que o tempo extra de estudo causou a diferença de notas. Contagens pequenas também tornam uma média mais sensível a uma única observação.

Principais conclusões

  • Use uma Series de intervalos como chave de agrupamento para resumir outra variável.
  • Informe contagens ao lado das médias para tornar visível a quantidade de dados que as sustenta.
  • observed=False mantém intervalos vazios com contagens zero e médias ausentes.
  • Quantis gerais e dentro de grupos usam populações de referência diferentes.
  • Padrões entre intervalos descrevem associações e podem ser sensíveis a amostras pequenas.
5

Resumir dados em tabelas dinâmicas e tabulações cruzadas

Uma tabela de dupla entrada facilita a comparação de combinações de categorias. Uma tabela dinâmica resume um valor numérico em cada interseção de linha e coluna, enquanto uma tabulação cruzada geralmente conta observações. Totais e proporções adicionam contexto, mas seu significado depende da agregação e do denominador. Você construirá os dois tipos de tabela e interpretará cada célula como resposta a uma pergunta precisa.

5.1 Construir tabelas dinâmicas com pivot_table

Uma tabela dinâmica resume valores para combinações de chaves de linhas e colunas. Cada célula reúne as observações de uma interseção e aplica uma função, como soma ou média.

Defina os papéis explicitamente
sales.pivot_table(
    index="region", columns="product",
    values="revenue", aggfunc="sum"
)

index fornece as chaves das linhas, columns as chaves das colunas, values a variável medida e aggfunc o cálculo. A tabela é:

Regiãocoffeetea
East209
North2848
South6812

North e tea combinam as receitas 30 e 18, então sua soma é 48. South e coffee combinam 36 e 32, resultando em 68. Os mesmos dados podem ser resumidos com sales.groupby(["region", "product"])["revenue"].sum().unstack().

O aggfunc padrão é "mean". Omiti-lo forneceria 24 para North e tea e 34 para South e coffee. Indique aggfunc="sum" quando a pergunta solicitar totais; a disposição de uma tabela não informa qual estatística ela contém.

Preencha combinações ausentes com cuidado

Combinações sem observações aparecem como NaN. Remova o pedido de tea de East e essa célula ficará ausente. fill_value=0 pode representar a ausência de pedidos em um relatório de somas ou contagens. Para uma média, substituir uma célula vazia por 0 sugere uma média observada que nunca foi medida. Mantenha seu estado ausente quando não houver média.

Chaves categóricas seguem a escolha de observed; desde o pandas 3.0, o padrão mostra as categorias observadas. Defina-o explicitamente quando um relatório precisar manter categorias não utilizadas.

Adicione resumos marginais usando a mesma função
sales.pivot_table(
    index="region", columns="product", values="revenue",
    aggfunc="sum", margins=True, margins_name="Total"
)

Os totais das linhas são East 29, North 76 e South 80. Os totais das colunas são coffee 116 e tea 69; o total geral é 185. margins_name substitui o rótulo padrão All.

Os resumos marginais são recalculados a partir das linhas originais usando a função de agregação. Para uma tabela dinâmica de médias, o canto é 23,125, a média dos oito pedidos. Calcular a média das seis médias exibidas nas células forneceria aproximadamente 21,17, porque as células contêm números diferentes de observações. Um resumo marginal não é uma instrução geral para somar ou calcular a média dos números exibidos.

Amplie a tabela ou faça contagens

aggfunc=["sum", "mean"] cria um bloco de colunas para cada estatística. Com units, North e tea têm soma 16 e média 8. Um dicionário de funções como {"units": "sum", "revenue": "max"} atribui funções a colunas de valores distintas. Várias chaves também podem criar linhas ou colunas hierárquicas, e valores discretizados funcionam como chaves categóricas.

aggfunc="size" conta linhas por célula, enquanto "count" conta valores não ausentes na coluna de valores escolhida. North tem um pedido de coffee e dois de tea.

pivot não faz agregação e exige combinações únicas de linhas e colunas. A tabela de vendas tem combinações repetidas de North e tea e de South e coffee, então pivot gera um erro de entrada duplicada. Use pivot_table quando várias observações precisarem ser combinadas em uma célula.

Principais conclusões

  • index, columns, values e aggfunc definem o significado de cada célula da tabela dinâmica.
  • A agregação padrão é uma média; solicite somas explicitamente.
  • Preencha contagens ou totais ausentes com zero apenas quando zero expressar corretamente a ausência.
  • Resumos marginais aplicam a mesma função às observações originais.
  • Várias funções ou valores podem produzir colunas hierárquicas.
  • Use pivot_table para combinações de chaves repetidas e pivot para combinações únicas.

5.2 Contar e comparar categorias com crosstab

Uma tabulação cruzada, ou tabela de contingência, conta observações para combinações de variáveis categóricas. As proporções permitem comparar grupos que contêm números diferentes de observações.

Conte combinações

Os dados da pesquisa têm seis usuários do plano básico: quatro usam celulares e dois usam laptops. Seus quatro usuários premium incluem um usuário de celular e três usuários de laptop.

survey = pd.DataFrame({
    "plan": ["basic"] * 6 + ["premium"] * 4,
    "device": ["phone", "phone", "phone", "laptop", "phone", "laptop",
               "laptop", "laptop", "phone", "laptop"],
    "minutes": [20, 35, 15, 40, 25, 50, 60, 45, 30, 55]
})
counts = pd.crosstab(survey["plan"], survey["device"], margins=True)

Passe as Series reais, não as strings "plan" e "device". A primeira variável fornece as linhas e a segunda fornece as colunas. A linha basic contém laptop 2 e phone 4; a linha premium contém laptop 3 e phone 1. Os totais das linhas são 6 e 4, os totais das colunas são 5 e 5 e o total geral é 10.

Para contagens absolutas, uma combinação ausente é mostrada como zero. Contagens equivalentes podem ser obtidas com survey.groupby(["plan", "device"]).size().unstack(fill_value=0) ou uma tabela dinâmica usando aggfunc="size". survey.value_counts(["plan", "device"]) fornece uma lista longa de frequências ordenada por contagem.

Escolha o denominador a partir da pergunta
ConfiguraçãoDenominadorSignificado de basic e phone
normalize="all"Todas as observações4/10 = 0,4
normalize="index"Total da linha basic4/6 ≈ 0,667
normalize="columns"Total da coluna phone4/5 = 0,8

“Que proporção dos usuários premium usa laptop?” começa pelos usuários premium, então o denominador é 4. Use a normalização por linha; a resposta é 3/4 = 0,75. “Que proporção dos usuários de celular tem o plano básico?” começa pelos usuários de celular, então o denominador é 5. Use a normalização por coluna; a resposta é 4/5 = 0,8.

Uma contagem de três usuários premium de laptop supera a contagem de dois do plano básico, mas a comparação dentro dos planos é de 75% contra aproximadamente 33,3%. Identifique a população comparada antes de transformar uma contagem em proporção. Multiplique os valores normalizados por 100 para obter percentuais.

Com margins=True, os resumos marginais normalizados também têm significados. A normalização por linha adiciona uma linha All que mostra as proporções gerais de dispositivos, 0,5 e 0,5. A normalização por coluna adiciona uma coluna All que mostra as proporções gerais de planos, 0,6 e 0,4.

Resuma uma terceira variável

Forneça values e aggfunc para substituir frequências por uma estatística numérica:

pd.crosstab(survey["plan"], survey["device"],
            values=survey["minutes"], aggfunc="mean")

As sessões de laptop do plano básico de 40 e 50 minutos têm média 45. As sessões de celular do plano básico de 20, 35, 15 e 25 minutos têm média 23,75. As sessões de laptop premium de 60, 45 e 55 minutos têm média de aproximadamente 53,33, enquanto a única sessão de celular premium dura 30 minutos. Essas células descrevem a duração das sessões, não contagens de usuários.

Uma lista de Series pode fornecer vários níveis de linhas ou colunas. Notas discretizadas também funcionam como categorias: cruzar fail, pass, merit e distinction com o grupo da turma fornece contagens de day 1, 2, 2, 2 e de evening 1, 2, 1, 1. O significado de cada célula continua decorrendo de sua chave de linha, chave de coluna e estatística escolhida.

Principais conclusões

  • crosstab conta combinações de Series ou arrays fornecidos.
  • Escolha a normalização por linha, por coluna ou global conforme a população do denominador da pergunta.
  • Adicionar values e aggfunc transforma as células de frequências em um resumo numérico.

Exercícios resolvidos de Agrupamento e agregação com pandas

5 Lições Interativas

1

Transformar linhas em grupos úteis

12 passos
Construa e inspecione um agrupamento, escolha chaves e considere todas as linhas no resultado.
  1. 1
    IntroduçãoComece com uma pergunta por grupos

    Um conjunto de pedidos pode responder a “Quantas unidades foram vendidas?” ou “Quantas unidades cada região vendeu?”. A segunda pergunta precisa de uma chave de agrupamento.

    Vamos dividir os pedidos por região, selecionar uma coluna de valores e combinar os resultados por grupo. Depois, mudaremos as chaves e a disposição da saída, acompanhando quais linhas o cálculo inclui.

  2. 2
    ExemploPrepare quatro pedidos

    Use uma tabela pequena para acompanhar cada linha:

    orders = pd.DataFrame({
        "region": ["West", "East", "West", "East"],
        "product": ["tea", "tea", "coffee", "tea"],
        "units": [6, 3, 8, 5]
    })
    

    As duas linhas de West estão separadas por uma linha de East. Elas ainda pertencem ao mesmo grupo quando a chave é a região; chaves correspondentes importam mais que posições vizinhas.

  3. 3
    ExplicaçãoDivida, some e combine
    orders.groupby("region")["units"].sum()
    

    East recebe as unidades 3 e 5, resultando em 8. West recebe 6 e 8, resultando em 14. O pandas combina os dois totais em uma Series indexada por região.

    Chamar apenas groupby("region") cria o objeto GroupBy. A seleção e sum() especificam o que calcular a partir desse agrupamento.

  4. 4
    DicaInspecione antes de calcular

    Armazene g = orders.groupby("region") quando várias inspeções forem úteis. g.ngroups informa 2, g.size() informa duas linhas por região e g.get_group("West") mostra as observações de West.

    Selecionar g["units"] produz um SeriesGroupBy. Selecionar g[["units"]] mantém a forma de DataFrame, mesmo com apenas uma coluna de valores selecionada.

  5. 5
    DesafioPreveja uma mudança no total

    Um novo pedido de West com 4 unidades é acrescentado à tabela. Quais são os totais regionais e o agrupamento remove as linhas originais dos pedidos?

    ---reveal---

    East permanece com 8. West passa a 18 porque o novo pedido se junta às 14 unidades existentes. As linhas originais permanecem na tabela de entrada; a soma agrupada é um novo objeto de resumo com uma entrada por região.

  6. 6
    ExemploAdicione uma segunda chave
    orders.groupby(["region", "product"])["units"].sum()
    

    Usando os quatro pedidos originais, East e tea totalizam 8, West e coffee totalizam 8 e West e tea totalizam 6. A Series tem um índice de dois níveis.

    unstack() move o produto para as colunas. East não tem linha de coffee, então sua célula de coffee está ausente; preenchê-la com zero é adequado para este relatório de totais de unidades.

  7. 7
    ConexãoUma chave pode ser calculada
    orders.groupby(orders["units"] >= 5)["units"].sum()
    

    A chave booleana cria um grupo False que totaliza 3 e um grupo True que totaliza 19. Ela rotula todas as linhas em vez de filtrar os pedidos pequenos.

    Uma Series mapeada também funciona como chave. Chaves em Series são alinhadas pelo rótulo da linha, enquanto um array fornece um rótulo por posição e deve corresponder ao número de linhas.

  8. 8
    DesafioLeia uma chave do índice

    Uma Series de estoque é indexada por M1, N1, M2, com valores 4, 9, 7. O que stock.groupby(lambda label: label[0]).sum() retorna?

    ---reveal---

    M totaliza 11 e N totaliza 9. A função recebe cada rótulo do índice e retorna sua primeira letra. Ela não inspeciona o valor do estoque. Um dicionário passado diretamente como chave também mapeia rótulos do índice; mapeie uma coluna primeiro quando seus valores definirem os grupos.

  9. 9
    ExplicaçãoEscolha rótulos e ordem

    orders.groupby("region", as_index=False)["units"].sum() retorna uma tabela com colunas de região e unidades. reset_index() converte um resumo indexado na mesma disposição sem índice hierárquico.

    A ordenação padrão das chaves lista East antes de West. Para classificar os totais, ordene os valores calculados: .sum().sort_values(ascending=False). A ordem das chaves e a ordem dos valores atendem a necessidades diferentes.

  10. 10
    Ideia-chaveChaves ausentes e não utilizadas são diferentes

    Suponha que a região seja categórica e também declare North, sem pedidos em North. Desde o pandas 3.0, o padrão observed=True omite essa categoria não utilizada; observed=False a mostra.

    Uma linha sem região é outra questão. O padrão dropna=True a exclui dos grupos. dropna=False mantém um grupo de chave ausente. Uma opção não substitui a outra.

  11. 11
    DesafioConcilie o relatório

    Os quatro pedidos originais totalizam 22 unidades. Um quinto pedido tem 7 unidades e nenhuma região. Uma coluna categórica de região também declara North, que não é utilizada. Como um relatório pode totalizar 29 e mostrar North?

    ---reveal---

    Agrupe com dropna=False, observed=False. O grupo de chave ausente mantém as 7 unidades extras; North aparece como categoria não utilizada com soma 0. Use também as_index=False se o relatório precisar de colunas comuns para as chaves.

  12. 12
    RecapitulaçãoVerifique chaves, valores e forma

    Escolha a chave que expressa quais linhas pertencem ao mesmo grupo e depois escolha a operação e as colunas de valores selecionadas. Inspecione os grupos quando não estiver claro quais linhas pertencem a cada um.

    Depois de calcular um total, verifique se chaves ausentes causaram a exclusão de linhas. Para apresentação, decida entre um resultado indexado e colunas comuns de chaves e diferencie ordenar nomes de grupos de classificar os valores calculados.

2

Escolher e nomear resumos dos grupos

13 passos
Calcule um relatório com várias colunas e distinga contagens de linhas, valores registrados e médias ponderadas.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoUm resumo deve responder a uma pergunta
  2. 2
    ExemploAcompanhe um lote com um valor ausente
  3. 3
    ExplicaçãoInterprete os padrões das reduções
  4. 4
    DesafioConte as leituras disponíveis
  5. 5
    ExemploNomeie cada saída
  6. 6
    ExplicaçãoEntenda colunas com várias funções
  7. 7
    DesafioCorrija os nomes do relatório
  8. 8
    ExemploAdicione uma amplitude personalizada
  9. 9
    DicaPrepare uma coluna booleana
  10. 10
    ExemploPondere a quantidade medida
  11. 11
    DesafioEncontre o preço por unidade
  12. 12
    DesafioCombine médias de grupos desiguais
  13. 13
    RecapitulaçãoMantenha o significado associado a cada estatística
3

Manter o contexto do grupo nas linhas corretas

16 passos
Construa proporções, cálculos ordenados, filtros de grupos e saídas flexíveis sem perder o alinhamento das linhas.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDecida de quais linhas a resposta precisa
  2. 2
    ExemploDifunda um total
  3. 3
    ExemploTransforme totais em proporções
  4. 4
    DesafioEscolha o valor de preenchimento adequado
  5. 5
    ExplicaçãoEstabeleça primeiro a sequência
  6. 6
    ExemploCompare com a observação anterior
  7. 7
    DicaEscolha a regra para empates
  8. 8
    DesafioAcompanhe grupos intercalados
  9. 9
    ExemploMantenha todas as linhas de um grupo que atende à condição
  10. 10
    DicaSelecione ou amostre dentro dos grupos
  11. 11
    DesafioAplique uma condição ao grupo inteiro
  12. 12
    ExplicaçãoPreveja a forma de apply
  13. 13
    ExemploRetorne várias linhas por grupo
  14. 14
    DesafioCorrija uma atribuição às linhas
  15. 15
    DesafioCombine um total de grupo com uma decisão por linha
  16. 16
    RecapitulaçãoAjuste o método ao resultado
4

Construir e comparar faixas numéricas

14 passos
Escolha limites fixos ou de quantis e use as categorias resultantes para análise por grupos.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoEscolha o que uma faixa deve significar
  2. 2
    ExemploCrie intervalos fixos
  3. 3
    ExplicaçãoInclua os valores externos
  4. 4
    DicaMantenha os rótulos na ordem dos intervalos
  5. 5
    DesafioPosicione valores nos limites
  6. 6
    ExplicaçãoEncontre um quantil amostral
  7. 7
    ExemploDivida por contagem ou amplitude
  8. 8
    Ideia-chaveEmpates podem alterar o número de intervalos
  9. 9
    DesafioEscolha limites estáveis
  10. 10
    ExemploResuma outra variável
  11. 11
    DicaExiba grupos vazios com clareza
  12. 12
    DesafioMude a população de referência
  13. 13
    DesafioInterprete a comparação final
  14. 14
    RecapitulaçãoInterprete as faixas antes de comparar resultados
5

Interpretar totais e proporções de dupla entrada

11 passos
Construa uma tabela dinâmica e escolha denominadores de tabulação cruzada a partir da pergunta feita.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDê um significado a cada célula
  2. 2
    ExemploConstrua uma pequena tabela dinâmica
  3. 3
    ExplicaçãoIndique a agregação
  4. 4
    Ideia-chaveResumos marginais usam as observações originais
  5. 5
    DesafioInforme ausências e totais
  6. 6
    ExemploConte combinações de categorias
  7. 7
    ExplicaçãoComece pelo denominador
  8. 8
    DesafioCompare grupos desiguais
  9. 9
    ConexãoUma tabulação cruzada pode resumir valores
  10. 10
    DesafioEscolha a tabela para um relatório
  11. 11
    RecapitulaçãoInterprete a função e a população juntas

Questões de Agrupamento e agregação com pandas

50 Questões de Prática em 5 conjuntos

Conjunto 1: Interpretar grupos e escolher resumos úteis10 Questões de Prática

Questão 1 de 10

Uma tabela tem os rótulos de equipe Delta, Echo, Delta e as contagens de itens 6, 5, 9. O que retorna ao agrupar por equipe e somar as contagens de itens?
  1. Delta 15; Echo 5
  2. Delta 6; Echo 14
  3. Delta 20; Echo 20
  4. Delta 7,5; Echo 5
Mostrar respostaOcultar resposta
Resposta: A
As duas linhas de Delta pertencem ao mesmo grupo, então suas contagens somam 15. Echo tem uma linha com 5 itens. Retornar 7,5 para Delta calcularia sua média em vez da soma solicitada; o agrupamento escolhe as linhas, enquanto o método escolhe a estatística.

Questão 2 de 10

Um DataFrame tem as colunas site e material. Como agrupar por cada combinação dessas duas colunas?
  1. df.groupby(("site", "material"))
  2. df.groupby("site")["material"]
  3. df.groupby(["site", "material"])
  4. df.groupby("site").get_group("material")
Mostrar respostaOcultar resposta
Resposta: C
Uma lista de nomes de colunas transforma cada combinação de local e material em um grupo. Uma tupla é interpretada como um único rótulo de coluna, então procuraria uma única coluna nomeada por essa tupla. Selecionar a coluna de material depois de agrupar por local não adiciona uma segunda chave.

Questão 3 de 10

É necessário um total agrupado como DataFrame com site e mass_kg em colunas comuns. Qual chamada produz essa disposição?
  1. df.groupby("site", sort=False)["mass_kg"].sum()
  2. df.groupby("site", as_index=False)["mass_kg"].sum()
  3. df.groupby("site", dropna=False)["mass_kg"].sum()
  4. df.groupby("site", observed=False)["mass_kg"].sum()
Mostrar respostaOcultar resposta
Resposta: B
as_index=False mantém a chave de agrupamento em uma coluna comum e retorna um DataFrame sem índice hierárquico. O padrão coloca os rótulos de local no índice do resultado. sort=False muda a ordem das chaves dos grupos, mas não as move para fora do índice.

Questão 4 de 10

Um lote tem as leituras 8, ausente, 12, ausente. Quais são seu size() e o count() de leituras?
  1. Tamanho 2; contagem 4
  2. Tamanho 4; contagem 4
  3. Tamanho 2; contagem 2
  4. Tamanho 4; contagem 2
Mostrar respostaOcultar resposta
Resposta: D
Há quatro linhas, então o tamanho do grupo é 4. Apenas duas leituras estão registradas, então a contagem de leituras é 2. Uma contagem de 4 trataria entradas ausentes como valores observados e poderia superestimar a quantidade de dados disponíveis para uma média.

Questão 5 de 10

Você precisa de uma linha por máquina com as colunas peak e average obtidas de load. Qual agregação nomeada é adequada?
  1. .agg(peak=("load", "max"), average=("load", "mean"))
  2. .agg(load=("peak", "max"), average=("load", "mean"))
  3. .agg(peak=("load", "mean"), average=("load", "max"))
  4. .agg(peak=("max", "load"), average=("mean", "load"))
Mostrar respostaOcultar resposta
Resposta: A
Cada palavra-chave nomeia uma saída, e seu par fornece a coluna de entrada seguida da função. A carga máxima pertence a peak, e a carga média a average. Inverter o par pediria ao pandas que encontrasse colunas de entrada com nomes de funções em vez de usar a coluna de carga.

Questão 6 de 10

Três registros de um laboratório têm leituras de energia de 4, 6 e 10 kWh. Que valor a linha de 6 kWh deve receber quando cada leitura é dividida pela soma transformada do laboratório?
  1. 0,60
  2. 0,20
  3. 0,30
  4. 0,50
Mostrar respostaOcultar resposta
Resposta: C
O total do laboratório é 20 kWh, e a linha contribui com 6 desses 20, então sua proporção é 0,30. A soma transformada repete 20 em cada linha do laboratório. Dividir pela maior leitura, 10, forneceria 0,60, que mede outra comparação.

Questão 7 de 10

As linhas estão na ordem dos eventos: o grupo A tem valor 7, o grupo B tem 3 e depois o grupo A tem 5. Qual é a saída da soma acumulada agrupada nessa ordem de linhas?
  1. 7, 10, 15
  2. 7, 3, 12
  3. 12, 3, 12
  4. 0, 0, 1
Mostrar respostaOcultar resposta
Resposta: B
O grupo A acumula seus próprios valores, primeiro 7 e depois 12. O grupo B começa separadamente em 3, e a saída permanece na ordem original das linhas. A sequência 7, 10, 15 seria uma soma acumulada da coluna inteira, cruzando o limite entre grupos.

Questão 8 de 10

Em qual intervalo fica o valor 40 em pd.cut(x, [0, 20, 40, 60]) com o fechamento padrão?
  1. (0, 20]
  2. (40, 60]
  3. Nenhum intervalo
  4. (20, 40]
Mostrar respostaOcultar resposta
Resposta: D
Os intervalos padrão incluem o extremo direito e excluem o esquerdo. Portanto, o valor 40 é incluído no intervalo que termina em 40. Colocá-lo no intervalo que começa em 40 usaria inclusão à esquerda, que exige outra configuração de fechamento.

Questão 9 de 10

Uma célula tem duas durações de entrega, 12 e 18 minutos. O que uma célula de pivot_table contém se aggfunc for omitido?
  1. 15 minutos
  2. 30 minutos
  3. 2 entregas
  4. 18 minutos
Mostrar respostaOcultar resposta
Resposta: A
A agregação padrão da tabela dinâmica é a média, então a célula contém 15 minutos. Ambas as observações contribuem para essa média. Um total de 30 minutos exigiria aggfunc="sum"; a disposição da tabela dinâmica, por si só, não seleciona um total.

Questão 10 de 10

Uma pesquisa tem 9 trabalhadores remotos, dos quais 6 andam de bicicleta, e 3 trabalhadores presenciais, dos quais 2 andam de bicicleta. Uma tabulação cruzada tem o local de trabalho nas linhas e o meio de transporte nas colunas. Qual resultado normalizado responde a “Que fração dos ciclistas é de trabalhadores remotos?”
  1. normalize="index"; 6/9
  2. normalize="all"; 6/12
  3. normalize="index"; 2/3
  4. normalize="columns"; 6/8
Mostrar respostaOcultar resposta
Resposta: D
A população de referência é a de todos os ciclistas: seis remotos e dois presenciais, totalizando oito ciclistas. A proporção de remotos entre eles é 6/8, obtida por normalização por coluna. O valor 6/9 responde quantos trabalhadores remotos andam de bicicleta, invertendo a população de referência.
Conjunto 2: Usar o contexto das linhas e comparar distribuições10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um agrupamento g já foi criado. Qual expressão informa quantos grupos ele contém?
  1. g.count()
  2. g.ngroups
  3. g.size()
  4. len(g.groups.keys()) + 1
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma Series tem rótulos de linha 10 e 20 com valores 5 e 8. Sua Series de chaves tem índice 20 e 10 com valores “outer” e “inner”, respectivamente. Quais são as somas dos grupos?
  1. Outer 5; inner 8
  2. Outer 13; inner 13
  3. Outer 8; inner 5
  4. Outer 0; inner 13
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um grupo tem 2 valores registrados com média 10; outro tem 6 valores registrados com média 20. Qual é a média dos 8 valores?
  1. 17,5
  2. 15,0
  3. 20,0
  4. 30,0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Uma agregação personalizada recebe as leituras 3, 7 e 14. O que lambda s: s.max() - s.min() retorna?
  1. 7
  2. 8
  3. 24
  4. 11
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um DataFrame tem rótulos de linha inteiros. Por que atribuir diretamente sua Series de somas indexada por região como nova coluna pode criar valores ausentes?
  1. A soma altera rótulos inteiros para nomes de regiões.
  2. A atribuição associa rótulos de linha ao índice do resumo.
  3. A Series de somas armazena apenas texto em vez de números.
  4. O agrupamento substitui o índice das linhas antes da atribuição.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um filtro de grupos deve manter uma oficina somente se cada delay registrado for menor que 4. Qual predicado fornece uma decisão por grupo?
  1. lambda g: g["delay"] < 4
  2. lambda g: (g["delay"] < 4).any()
  3. lambda g: (g["delay"] < 4).all()
  4. lambda g: g["delay"].count() < 4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma função apply agrupada retorna uma Series indexada por low e high para cada grupo. Qual estrutura o pandas constrói?
  1. Uma Series com apenas os dois valores do primeiro grupo
  2. Um DataFrame com o número original de linhas de entrada
  3. Um DataFrame com grupos nas colunas e linhas originais
  4. Um DataFrame com uma linha por grupo e duas colunas
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Os tempos mensais de entrega precisam ser divididos em quatro grupos com números aproximadamente iguais de observações. Qual operação é adequada?
  1. pd.qcut(times, 4)
  2. pd.cut(times, 4)
  3. times.quantile(0.4)
  4. times.groupby(times).size()
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Oito temperaturas são 10, 11, 12, 13, 30, 31, 32, 33 °C. O local A tem as quatro primeiras; o local B tem as quatro últimas. Como 13 °C é classificado em uma divisão pela mediana geral e em uma divisão dentro do local A?
  1. Superior no geral; inferior em A
  2. Inferior no geral; inferior em A
  3. Inferior no geral; superior em A
  4. Superior no geral; superior em A
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma tabela de frequências tem linhas X e Y e colunas P e Q: X tem 2 e 6; Y tem 3 e 1. Com normalização por linha e resumos marginais, o que a linha All mostra para P e Q?
  1. 0,5 e 0,5
  2. 5/12 e 7/12
  3. 0,4 e 0,6
  4. 0,25 e 0,75
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Verificar formas dos resultados e decisões sobre limites10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Uma chave categórica lista A, B e C, mas os dados contêm apenas A e B. No pandas 3, qual configuração inclui C em um resumo agrupado?
  1. dropna=False
  2. as_index=False
  3. sort=False
  4. observed=False
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Duas colunas de valores são agregadas com ["sum", "mean"]. Quais rótulos as colunas do resultado têm?
  1. Pares de nome da coluna de entrada e nome da função
  2. Apenas os dois nomes originais das colunas de entrada
  3. Pares de valor da chave do grupo e rótulo da linha de entrada
  4. Apenas os dois nomes de funções de agregação selecionadas
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um fornecedor envia 2 kg ao preço unitário de 9 e 8 kg ao preço unitário de 4. Qual é o preço médio por quilograma da remessa?
  1. 6,5
  2. 4,0
  3. 5,0
  4. 5,5
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Os valores de um grupo em sequência são 12, 9 e 15. O que pct_change() agrupado retorna?
  1. Ausente, −3, 6
  2. Ausente, −0,25, aproximadamente 0,667
  3. 0, −0,25, 0,5
  4. Ausente, −0,333, 0,4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Uma tabela não está ordenada. Você precisa das duas linhas de maior mass_kg de cada batch. Qual procedimento é adequado?
  1. Agrupar por lote e obter tail(2).
  2. Ordenar nomes dos lotes e obter head(2).
  3. Agrupar por lote e filtrar grupos de tamanho 2.
  4. Ordenar a massa em ordem decrescente e usar head(2) por grupo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Uma função f ordena cada grupo por qualidade e retorna duas linhas. Com df.groupby("batch", group_keys=False).apply(f), o que você deve esperar antes de atribuir o resultado de volta?
  1. Rótulos originais, com linhas selecionadas e ordenadas por grupo
  2. Ordem original das linhas, com todas as linhas de entrada mantidas
  3. Series escalar indexada por lote, com um valor por grupo
  4. Novo índice inteiro, com todas as linhas de entrada mantidas
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um relatório usa pd.cut(x, [0, 10, 20], right=False). Quais dos valores 0, 10 e 20 recebem intervalos?
  1. Apenas 10 e 20
  2. Apenas 0 e 20
  3. Apenas 0 e 10
  4. Os três valores
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Os valores são 2, 2, 2, 2, 2, 2, 6, 10. Os limites dos quartis se repetem. Qual é a consequência de qcut(..., 4, duplicates="drop") em comparação com atribuir postos primeiro usando method="first"?
  1. Remover limites mantém quatro intervalos e desfaz empates.
  2. Remover limites reduz intervalos; atribuir postos pode separar empates.
  3. Remover limites exclui linhas empatadas; atribuir postos as mantém.
  4. Remover limites usa amplitudes fixas; atribuir postos usa quartis.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um relatório de faixas fixas de notas deve mostrar uma faixa vazia além das faixas ocupadas. Qual configuração e resultado expressam isso corretamente para contagens e médias?
  1. observed=True; contagem 0, média 0
  2. dropna=False; contagem 1, média ausente
  3. observed=False; contagem 0, média ausente
  4. as_index=False; contagem ausente, média 0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Várias observações compartilham as mesmas chaves de linha e coluna. Você precisa de um total por célula. Qual operação é adequada?
  1. pivot com a coluna de valores
  2. unstack nas linhas inalteradas
  3. crosstab sem coluna de valores
  4. pivot_table com aggfunc="sum"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Construir relatórios agrupados confiáveis10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um caderno computacional armazena g = df.groupby("team")[["items"]]. Qual objeto g.sum() retorna?
  1. Uma Series com um total por equipe
  2. Um DataFrame com uma coluna items
  3. Um DataFrame com todas as linhas originais
  4. Uma Series com todas as linhas originais
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um DataFrame tem rótulos de índice a, b, c e valores 5, 8, 12. Uma Series de chaves tem rótulos c e a com valores “R” e “S”. Com dropna=False, quais somas agrupadas resultam?
  1. R 5; S 8; ausente 12
  2. R 12; S 13; sem grupo ausente
  3. R 12; S 5; ausente 8
  4. R 17; S 8; sem grupo ausente
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um único grupo contém um valor registrado, 11. O que seu std() agrupado padrão retorna?
  1. 0.0
  2. 11.0
  3. 1.0
  4. NaN
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Duas inspeções registram os indicadores de defeito True, False para a fábrica A e True, True, False, False, False, False para a fábrica B. Que fração de todos os itens inspecionados é defeituosa?
  1. 3/8
  2. 1/2
  3. 5/12
  4. 1/3
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Qual implementação retorna a fração de leituras de pelo menos 16 em cada grupo sem uma função Python por grupo?
  1. df.groupby("batch")["reading"].mean() >= 16
  2. df.assign(hit=df["reading"] >= 16).groupby("batch")["hit"].sum()
  3. df.assign(hit=df["reading"] >= 16).groupby("batch")["hit"].mean()
  4. df.groupby("batch")["reading"].count() / len(df)
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

As linhas são A:4, B:9, A:12, B:3 para grupo e valor. Uma nova coluna deve mostrar a participação de cada linha no total de seu próprio grupo. Quais valores aparecem na ordem das linhas?
  1. 0,25; 0,25; 0,75; 0,75
  2. 1/7, 9/28, 3/7, 3/28
  3. 0,5; 0,5; 0,5; 0,5
  4. 0,25; 0,75; 0,75; 0,25
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Os eventos não ordenados são U na etapa 2 com valor 15, V na etapa 1 com 8 e U na etapa 1 com 10. Depois de ordenar por etapa, qual diferença agrupada pertence à linha de U na etapa 2 e por quê?
  1. −5; usar o próximo valor de U
  2. 5; subtrair o valor de U na etapa 1
  3. 7; subtrair o valor anterior de V
  4. 15; reiniciar em cada evento
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Faixas fixas devem incluir 0 e 100 e colocar 50 na inferior de duas faixas. Qual chamada é adequada?
  1. pd.cut(x, [0, 50, 100], right=False)
  2. pd.cut(x, [0, 50, 100], include_lowest=True)
  3. pd.cut(x, [0, 50, 100])
  4. pd.cut(x, [0, 50, 101], right=False)
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Os valores ordenados são 4, 8, 12, 24, 40. Qual é o quantil 0,6 com a interpolação padrão do pandas?
  1. 16,8
  2. 24,0
  3. 19,2
  4. 12,0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma tabela dinâmica de médias tem duas células ocupadas em uma linha: uma tem média 10 de 1 observação; a outra tem média 30 de 3 observações. Todos os valores e chaves estão registrados. Qual é o resumo marginal de média dessa linha?
  1. 20
  2. 40
  3. 25
  4. 30
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Diagnosticar análises e comparações por grupos10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Os valores são 7 e 11 sob as chaves A e B, mais 6 com uma chave ausente. A chave é categórica com uma categoria C não utilizada. Quais configurações preservam o total 24 e também mostram C?
  1. dropna=True, observed=False
  2. dropna=False, observed=True
  3. dropna=True, observed=True
  4. dropna=False, observed=False
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

No pandas 3, um grupo tem os valores 2 e 6. Por que .agg("std") e .agg(np.std) podem fornecer resultados diferentes?
  1. A chamada com string usa divisor amostral; NumPy usa divisor populacional.
  2. A chamada com string usa divisor populacional; NumPy usa divisor amostral.
  3. A chamada com string arredonda as entradas; NumPy preserva as entradas.
  4. A chamada com string calcula variância; NumPy calcula desvio padrão.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Uma estação tem leituras 2 e 14, e outra tem 9, 9 e 9. Você precisa de todas as linhas originais das estações cuja média supera 8. O que deve permanecer?
  1. Apenas a linha 14 da primeira estação
  2. Todas as cinco linhas das duas estações
  3. Todas as três linhas da segunda estação
  4. Uma linha de resumo da segunda estação
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Desde o pandas 3.0, onde uma função passada ao apply agrupado de um DataFrame pode ler a chave de seu grupo atual?
  1. g.columns
  2. g.name
  3. g.index.name
  4. g.shape
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um relatório discretiza horas de estudo e mostra notas médias 60 e 85 com contagens 20 e 2. Qual conclusão é sustentada por esses resultados?
  1. Estudo extra causou aumento de 25 pontos para cada estudante.
  2. A faixa superior é mais confiável porque sua média é maior.
  3. Todos na faixa superior tiveram notas maiores que os demais.
  4. As médias diferem; a média superior se baseia em apenas duas notas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Uma tabulação cruzada tem departamentos nas linhas e resultados nas colunas. O departamento J tem 18 aprovações e 6 reprovações; K tem 12 aprovações e 4 reprovações. Qual é a participação de J entre as reprovações e qual é sua taxa de reprovação dentro do departamento?
  1. 60% e 25%
  2. 25% e 60%
  3. 75% e 60%
  4. 60% e 75%
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma equipe usa apply(lambda s: s - s.mean()) em uma Series numérica agrupada, depois redefine o índice do resultado e atribui seus valores por posição à tabela original não ordenada. Por que a nova coluna pode estar errada?
  1. O cálculo usa uma média geral em vez de médias dos grupos.
  2. Redefinir o índice muda todos os desvios para totais dos grupos.
  3. A montagem por grupos pode associar valores às linhas erradas.
  4. Um resultado de apply sempre remove a primeira observação de cada grupo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma agregação personalizada usa len(s) nos valores 5, ausente, 7. O que ela retorna e o que esse número mede?
  1. 2; valores registrados
  2. 3; valores registrados
  3. 2; linhas no grupo
  4. 3; linhas no grupo
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

O grupo A tem os valores 2, ausente, 8; o grupo B tem 20, ausente, 40. Após preencher usando a média transformada de cada grupo, qual é a média dos seis valores completos?
  1. 17,5
  2. Aproximadamente 11,667
  3. 20,0
  4. 15,0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma célula de média em uma tabela dinâmica não tem observações. Por que fill_value=0 pode induzir uma pessoa a erro?
  1. Ele conta a célula vazia como uma nova linha de entrada.
  2. Ele representa uma média não observada como um zero medido.
  3. Ele remove toda a categoria da tabela.
  4. Ele transforma todas as médias preenchidas em totais.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

68 Termos-Chave, cada um com sua definição

A

Agregação
Uma agregação reduz um grupo de observações a um valor de resumo por coluna selecionada, como uma soma, contagem ou média.
Uma agregação de quantidades de pedidos por armazém fornece uma quantidade total para cada armazém.
Agregação nomeada
A agregação nomeada especifica nomes de saída junto com colunas de entrada e funções de resumo, produzindo resultados com rótulos claros.
A agregação nomeada cria total_mass a partir de uma soma e max_temperature a partir de um máximo em um relatório.
Agregação personalizada
Uma agregação personalizada é uma função escrita pelo usuário que recebe a Series de um grupo e retorna um valor de resumo útil.
Uma agregação personalizada pode informar o maior valor de um grupo menos o menor como amplitude.
Alinhamento por índices
O alinhamento por índices associa objetos do pandas pelos rótulos de seus índices ao combinar ou atribuir valores, incluindo chaves de agrupamento em Series.
O alinhamento por índices associa uma chave com rótulo de linha 8 à linha de dados 8, mesmo que a Series de chaves seja exibida em outra ordem.
Amostra por grupo
Uma amostra por grupo extrai observações separadamente dentro de cada grupo, usando uma contagem de linhas ou fração especificada para cada um.
Uma amostra por grupo com n=1 inclui um registro de cada região não vazia em vez de correr o risco de omitir regiões.
Análise por faixas
A análise por faixas resume uma variável dentro de faixas numéricas de outra, frequentemente informando contagens e médias para cada faixa.
A análise por faixas compara notas médias de provas entre estudantes em diferentes faixas fixas de horas de estudo.
Análise por quantis
A análise por quantis compara uma medida entre grupos definidos por intervalos de quantis, como as partes inferior e superior de uma amostra.
A análise por quantis pode resumir a duração de sessões para clientes em cada quarto dos valores de compra.
Aplicação de função por grupo
A aplicação de função por grupo executa uma função em cada grupo e combina saídas escalares, em Series ou em DataFrame em um resultado.
A aplicação de função por grupo pode calcular uma correlação de duas colunas medidas dentro das observações de cada grupo de turma.
Associação
Uma associação é uma relação observada entre variáveis, como a variação das médias dos grupos entre intervalos, sem estabelecer uma causa.
Uma associação entre faixas de horas de estudo e notas médias também pode refletir outras diferenças entre estudantes.

C

Categoria não utilizada
Uma categoria não utilizada é um valor categórico declarado que não tem observações no conjunto de dados atual, mas pode aparecer em um resumo.
Uma categoria não utilizada de armazém mantém seu lugar em um relatório quando se escolhe observed=False.
Categorias observadas
Categorias observadas são valores categóricos presentes nos dados, em contraste com categorias declaradas sem linhas.
Apenas as categorias observadas aparecem por padrão quando uma chave categórica é agrupada no pandas 3.
Chave ausente
Uma chave ausente é um valor de agrupamento ausente que exclui uma linha por padrão ou forma um grupo separado quando se usa dropna=False.
Uma chave ausente na coluna de região pode explicar por que as somas regionais omitem um pedido que foi registrado.
Chave de agrupamento
Uma chave de agrupamento atribui cada linha a um grupo; várias chaves atribuem linhas conforme sua combinação compartilhada de valores.
Uma chave de agrupamento baseada no tipo de material coloca todos os registros de alumínio no mesmo grupo de análise.
Chaves dos grupos
As chaves dos grupos identificam partes retornadas em um resultado agrupado e podem ser adicionadas como nível externo do índice por apply.
Chaves dos grupos acima dos rótulos originais das linhas deixam claro qual região forneceu cada pedido selecionado.
Colunas hierárquicas
Colunas hierárquicas têm vários níveis de rótulos, muitas vezes associando cada variável medida à sua função de agregação.
Colunas hierárquicas distinguem uma média de unidades de uma média de receita quando ambas as estatísticas aparecem juntas.
Combinação de chaves duplicada
Uma combinação de chaves duplicada ocorre quando várias linhas compartilham as chaves de linha e coluna que identificariam uma célula em uma tabela dinâmica.
Uma combinação de chaves duplicada precisa de agregação com pivot_table antes de poder ocupar uma célula numérica.
Contagem de linhas
Uma contagem de linhas mede o número de observações em um grupo, incluindo observações com valores ausentes nas colunas medidas.
A contagem de linhas permanece em cinco mesmo quando duas das cinco leituras de temperatura de um lote estão ausentes.
Contagem de valores distintos
Uma contagem de valores distintos mede quantos valores diferentes ocorrem em um grupo; nunique() do pandas exclui valores ausentes por padrão.
Uma contagem de produtos distintos por região mostra quantos tipos de produto cada região vendeu.
Contagem de valores não ausentes
Uma contagem de valores não ausentes mede quantos valores registrados uma coluna selecionada tem dentro de um grupo, excluindo suas entradas ausentes.
A contagem de valores não ausentes é três quando um lote de cinco linhas contém apenas três temperaturas registradas.

D

Desempilhamento de nível do índice
O desempilhamento de nível do índice é uma operação que move um nível do índice para as colunas, transformando combinações indexadas em uma tabela mais larga.
O desempilhamento move rótulos de produto de um índice agrupado para colunas ao lado dos totais de cada região.
Desvio em relação à média do grupo
Um desvio em relação à média do grupo é um valor menos a média de seu próprio grupo, mostrando quanto ele está acima ou abaixo dessa média.
Um desvio positivo em relação à média do grupo indica um pedido com receita acima da média de sua região.
Desvio padrão amostral
O desvio padrão amostral mede a dispersão em torno de uma média usando um divisor igual a um a menos que a contagem de observações registradas.
Um grupo com uma leitura registrada tem desvio padrão amostral ausente segundo o padrão do pandas.
Dicionário de agregação
Um dicionário de agregação mapeia colunas de entrada de um DataFrame para funções, permitindo resumos diferentes para medidas diferentes.
Um dicionário de agregação pode solicitar uma soma para unidades e uma média e um máximo para duração.
Difusão
A difusão repete um resultado escalar de grupo nas linhas do grupo, disponibilizando-o para cálculos por linha.
Difundir um total de grupo por transform fornece a cada linha o denominador de sua própria proporção.
Discretização em intervalos
A discretização em intervalos converte observações numéricas em categorias de intervalos, permitindo que faixas de valores funcionem como rótulos de agrupamento.
Discretizar durações de entrega em faixas de tempo fixas facilita a comparação de um relatório mensal de frequências.
Dividir, aplicar e combinar
Dividir, aplicar e combinar é um padrão que agrupa linhas correspondentes, processa cada grupo separadamente e reúne seus resultados.
O padrão dividir, aplicar e combinar transforma uma tabela de pedidos individuais em uma quantidade total para cada região.

E

Empate
Um empate ocorre quando observações têm valores iguais; manter valores empatados juntos pode tornar desiguais as contagens dos intervalos de quantis.
Um empate em um quartil amostral pode colocar várias observações iguais em um intervalo e deixar contagens desiguais.
Escore z dentro do grupo
Um escore z dentro do grupo expressa o desvio de um valor em relação à média de seu grupo em unidades do desvio padrão desse grupo.
Um escore z dentro do grupo pode mostrar uma leitura relativamente alta em um laboratório mesmo quando seu valor absoluto é modesto.
Expressão lambda
Uma expressão lambda define uma função Python anônima e curta, frequentemente usada para um cálculo personalizado compacto por grupo.
Uma expressão lambda pode retornar a fração de leituras que atingem um limite de temperatura especificado.

F

Filtragem
Uma filtragem mantém linhas ou grupos originais selecionados, preservando seus rótulos de linha em vez de substituí-los por resumos.
Uma filtragem pode manter todos os pedidos de regiões que têm pelo menos três pedidos no conjunto de dados.
Filtro de grupos
Um filtro de grupos mantém ou remove um grupo inteiro usando uma única decisão booleana e retorna as linhas originais dos grupos aprovados.
Um filtro de grupos mantém todos os registros de estações cuja medição média supera um limite de relatório.
Função de agregação
Uma função de agregação determina como uma célula de tabela dinâmica combina suas observações, por exemplo, por meio de uma média, soma ou contagem.
A função de agregação muda uma célula com chaves repetidas de receita média para receita total quando definida como soma.
Função por grupo
Uma função por grupo recebe os dados de um grupo e calcula seu resultado; apply agrupado pode fornecer a ela várias colunas juntas.
Uma função por grupo pode ordenar todas as colunas de cada lote e retornar seus dois registros de maior qualidade.

G

Graus de liberdade
Os graus de liberdade são as informações independentes disponíveis para estimar a dispersão; a variância amostral usa um a menos que a contagem registrada.
Com três leituras registradas, os graus de liberdade da variância amostral padrão são dois.

Í

Índice hierárquico
Um índice hierárquico é um índice com vários níveis, permitindo que um rótulo de linha ou coluna represente uma combinação de valores de chave.
Um índice hierárquico de região e produto identifica um total tanto pelo local onde ocorreu um pedido quanto pelo que ele continha.

I

Interpolação linear
A interpolação linear estima um valor entre observações vizinhas tomando a fração correspondente da diferença entre elas.
A interpolação linear pode colocar um percentil amostral entre duas notas, mesmo quando nenhuma delas é igual a ele.
Intervalo de classe definido por quantis
Um intervalo de classe definido por quantis é um intervalo delimitado por quantis amostrais, destinado a conter uma proporção escolhida das observações da amostra.
Um intervalo de classe definido por quantis para o quarto superior de clientes pode mudar seus limites numéricos em uma amostra posterior.
Intervalo fechado à direita
Um intervalo fechado à direita inclui seu extremo superior; os intervalos padrão de cut excluem o extremo esquerdo e incluem o direito.
O intervalo fechado à direita (20, 40] contém o valor 40, mas exclui o valor 20.
Intervalos de classe de mesma amplitude
Intervalos de classe de mesma amplitude dividem uma faixa numérica em intervalos de igual amplitude, sem exigir contagens iguais de observações.
Intervalos de classe de mesma amplitude podem colocar a maioria das entregas no primeiro intervalo quando alguns atrasos são extremamente longos.

L

Limite de classe
Um limite de classe é uma fronteira entre intervalos ou em suas extremidades; limites vizinhos definem as faixas possíveis para atribuição aos intervalos.
Um limite de classe em 50 separa duas faixas de notas, e a inclusão de 50 é decidida pela regra de fechamento.

M

Mapeamento
Um mapeamento associa rótulos ou valores de entrada a chaves de saída, permitindo que várias categorias originais compartilhem um grupo mais amplo.
Um mapeamento de regiões para zonas pode combinar várias quantidades regionais em um total por zona.
Média booleana
Uma média booleana é a média de valores True e False interpretados como 1 e 0, fornecendo a proporção de valores True.
Uma média booleana de indicadores de defeito fornece a fração de itens defeituosos de cada lote em vez de sua contagem de defeitos.
Média ponderada
Uma média ponderada dá às observações influências diferentes conforme pesos especificados, como as unidades de cada pedido.
Uma média ponderada dos preços dos pedidos usando contagens de unidades é igual à receita total dividida pelo total de unidades.
Mediana
A mediana é o valor central dos valores registrados ordenados, sendo a média dos dois valores centrais quando a contagem de valores registrados é par.
A mediana dos valores de pedidos agrupados pode ser menos afetada por um único pedido grande que sua média.

N

Normalização
A normalização converte contagens de frequência em proporções ao dividi-las por um total escolhido de linha, coluna ou geral.
A normalização por colunas compara a distribuição dos planos separadamente entre usuários de celular e entre usuários de laptop.

O

Objeto chamável
Um objeto chamável é uma função ou objeto semelhante que o pandas pode invocar em valores agrupados, usando as próprias regras de cálculo desse objeto.
Um objeto chamável como np.std pode usar um divisor padrão diferente da função do pandas indicada pela string "std".
Objeto GroupBy
Um objeto GroupBy contém informações de agrupamento e oferece operações que calculam resultados a partir das linhas de cada grupo.
Um objeto GroupBy criado para equipes pode posteriormente produzir tanto totais de itens quanto tempos médios de entrega.

P

População de referência
Uma população de referência é o conjunto de observações usado em uma comparação, como todas as linhas ou as linhas de um subgrupo.
Uma população de referência de uma turma pode dar a uma nota um rótulo relativo diferente daquele obtido no conjunto de dados completo dos estudantes.
Posto denso
Um posto denso atribui o mesmo posto a valores iguais e dá ao próximo valor distinto o inteiro seguinte, sem lacuna.
Com posto denso em ordem decrescente, duas maiores leituras iguais recebem o posto 1 e a próxima leitura menor recebe o posto 2.
Posto dentro do grupo
Um posto dentro do grupo descreve a posição de um valor em relação aos demais valores de seu próprio grupo, usando uma regra escolhida para empates.
Um posto dentro do grupo em ordem decrescente dá ao maior pedido de cada região o posto 1 sem mover nenhuma linha.
Predicado
Um predicado é uma função que retorna uma decisão booleana; um predicado de filter em GroupBy deve fornecer uma decisão por grupo.
Um predicado que usa all() pode exigir que todas as leituras de um grupo atendam à mesma condição de qualidade.
Proporção global
Uma proporção global divide a contagem de uma célula pelo total geral, descrevendo a participação dessa combinação em todas as observações.
Uma proporção global de 0,2 significa que a combinação de categorias da célula representa 20% da tabela inteira.
Proporção por coluna
Uma proporção por coluna divide a contagem de uma célula pelo total de sua coluna, descrevendo a categoria da linha da célula dentro da população dessa coluna.
Uma proporção por coluna em uma tabela de plano por dispositivo fornece a proporção de usuários do plano básico entre todos os usuários de celular.
Proporção por linha
Uma proporção por linha divide a contagem de uma célula pelo total de sua linha, descrevendo a categoria da coluna da célula dentro da população dessa linha.
Uma proporção por linha em uma tabela de plano por dispositivo fornece a proporção de usuários de celular entre os usuários do plano básico.

Q

Quantil
Um quantil localiza uma posição fracionária especificada em dados ordenados; o pandas pode interpolar quando essa posição fica entre valores.
O quantil 0,5 é a mediana de um grupo, enquanto o quantil 0,9 marca uma posição relativa mais alta.
Quartil
Um quartil é um dos pontos de corte em posições de quartos de uma distribuição, geralmente nas probabilidades 0,25, 0,5 e 0,75.
Os limites dos quartis amostrais permitem que qcut divida observações em quatro grupos com contagens aproximadamente iguais.

R

Resultado escalar
Um resultado escalar é um valor retornado para um grupo, que apply agrupado combina em uma Series indexada pelas chaves dos grupos.
Um resultado escalar do cálculo de preço de cada região fornece um único preço regional por unidade.
Resumo marginal
Um resumo marginal é uma linha ou coluna de resumo calculada a partir das observações originais usando a função de agregação da tabela dinâmica.
Um resumo marginal de média pondera as células ocupadas por suas contagens de observações porque calcula a média das linhas originais.

S

Seleção dos n maiores valores
Uma seleção dos n maiores valores mantém uma quantidade escolhida das linhas com maiores valores por grupo após a ordenação pela variável medida.
Uma seleção dos dois maiores pedidos por região pode usar uma ordenação decrescente de receita seguida de head(2) agrupado.
Soma acumulada
Uma soma acumulada agrupada é um total acumulado que segue a ordem atual das linhas e recomeça para cada grupo.
A soma acumulada de unidades vendidas recomeça ao acompanhar a sequência de pedidos de outra região.

T

Tabela de resumo sem índice hierárquico
Uma tabela de resumo sem índice hierárquico mantém as chaves de agrupamento como colunas comuns, com uma linha para cada combinação de chaves resumida.
Uma tabela de resumo sem índice hierárquico com colunas de local e massa total é conveniente para uma junção posterior por local.
Tabela dinâmica
Uma tabela dinâmica agrega colunas de valores para combinações de chaves de linha e coluna, exibindo os resultados em uma grade de dupla entrada.
Uma tabela dinâmica pode exibir o total de unidades vendidas para cada combinação de região e produto em um relatório.
Tabulação cruzada
Uma tabulação cruzada é uma tabela de frequências de combinações de variáveis categóricas, também chamada tabela de contingência.
Uma tabulação cruzada de plano por dispositivo conta quantos usuários pertencem a cada combinação de plano e dispositivo.
Tipo categórico ordenado
Um tipo categórico ordenado é um conjunto de valores de categoria com uma sequência explícita, como a ordem crescente de intervalos numéricos.
Um tipo categórico ordenado mantém os rótulos de notas fail, pass, merit, distinction em sua sequência significativa.
Transformação
Uma transformação agrupada produz resultados com o comprimento e o índice da entrada, permitindo que informações do grupo acompanhem cada linha.
Uma transformação repete o total de uma região nas linhas de seus pedidos para que cada pedido receba uma proporção regional.

V

Valor de preenchimento
Um valor de preenchimento substitui células ausentes do resultado por um valor de exibição escolhido, que deve expressar corretamente o significado da ausência.
Um valor de preenchimento zero pode descrever ausência de pedidos em uma tabela de contagem, mas representar incorretamente uma média não observada.
Valor defasado
Um valor defasado é uma observação anterior deslocada para uma linha posterior dentro da sequência escolhida, separadamente para cada grupo.
Um valor defasado permite que cada pedido compare suas unidades com o pedido anterior da mesma região.
Variação relativa
Uma variação relativa é a diferença em relação ao valor anterior dividida por esse valor anterior, expressa como fração.
Uma variação relativa de 0,15 significa um aumento de 15% em relação à observação anterior no mesmo grupo.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar