Pular para o conteúdo principal

Questão de Programação — Conceitos básicos de programação — CESPE / CEBRASPE 2025

ProgramaçãoConceitos básicos de programação
Código
ce196331
Banca
CESPE / CEBRASPE
Órgão
CAESB-DF
Ano
2025
Nível
Superior
Cargo
Analista de Suporte ao Negócio - Analista de Sistemas
Certa companhia de abastecimento de água organiza as informações da empresa em três conjuntos de dados: clientes (idCliente, nomeCliente), com dados dos clientes; imoveis (idImovel, idCliente, endereco), com dados de imóveis; e contas (idConta, idImovel, consumo), com dados do histórico de pagamento de contas e do consumo, em metros cúbicos, de cada conta. Essa organização leva em consideração que cada cliente pode ter vários imóveis (chave estrangeira: idCliente em imoveis) e que cada imóvel pode ter várias contas (chave estrangeira: idImovel em contas). Os conjuntos de dados (clientes, imoveis e contas) foram carregados para um DataFrame no Pandas.Com base nas informações da situação hipotética precedente, assinale a opção que corresponde ao trecho de código que, caso seja executado, exibirá corretamente o total de consumo por cliente na variável totalConsumo.
  1. AtotalConsumo = contas.groupby('idCliente')['consumo'] .sum()
  2. BimoveisContas = pd.merge(imoveis, contas, on='idImovel')totalConsumo = imoveisContas.groupby('idCliente') ['consumo'].sum()
  3. CtotalConsumo = clientes.merge(contas, on = 'idCliente').groupby('idCliente')['consumo'].sum()
  4. DtotalConsumo = contas.groupby('idImovel') ['consumo'].sum()
  5. EimoveisContas = pd.merge(contas, imoveis, on='idCliente')totalConsumo = imoveisContas.groupby('idImovel') ['consumo'] .sum()
Revelar gabarito e comentário

GabaritoB — imoveisContas = pd.merge(imoveis, contas, on='idImovel') totalConsumo = imoveisContas.groupby('idCliente') ['consumo'].sum()

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Pandas – Operações com DataFrames (merge e groupby)

Gabarito: letra B. Para obter o total de consumo por cliente, é necessário relacionar as tabelas imoveis e contas pela chave idImovel, pois somente imoveis possui o idCliente. Após o merge, agrupa-se por idCliente e soma-se o consumo. É exatamente o que ocorre no código da alternativa B.

A questão testa o uso correto do merge (ou pd.merge) e do groupby no Pandas, simulando um modelo relacional simples. Vejamos a estrutura:

  • clientes: (idCliente, nomeCliente)

  • imoveis: (idImovel, idCliente, endereco) – chave estrangeira idCliente

  • contas: (idConta, idImovel, consumo) – chave estrangeira idImovel

O objetivo é totalizar o consumo por cliente. Como a tabela contas não contém o idCliente diretamente, é preciso percorrer o caminho contas → imoveis → clientes. O merge entre imoveis e contas (pela coluna comum idImovel) produz um DataFrame com as colunas de ambas, incluindo idCliente. A partir daí, groupby('idCliente')['consumo'].sum() agrupa por cliente e soma o consumo de todas as suas contas.

Critério

Alternativa B (Correta)

Alternativa A

Alternativa C

Alternativa D

Alternativa E

Merge utilizado

pd.merge(imoveis, contas, on='idImovel')

Nenhum

clientes.merge(contas, on='idCliente')

Nenhum

pd.merge(contas, imoveis, on='idCliente')

Chave do merge

idImovel (presente em ambas as tabelas)

idCliente (ausente em contas)

idCliente (ausente em contas)

Coluna de agrupamento

idCliente (vem de imoveis após merge)

idCliente (inexistente em contas)

idCliente

idImovel

idImovel

Resultado esperado

Consumo total por cliente

Erro (KeyError)

Erro (KeyError)

Consumo por imóvel (não por cliente)

Erro (KeyError)

Atende ao objetivo?

✅ Sim

❌ Não

❌ Não

❌ Não

❌ Não

Alternativa A — ❌ Incorreta

contas.groupby('idCliente')['consumo'].sum() – A tabela contas não possui a coluna idCliente. Tentar agrupar por uma coluna inexistente gera erro (KeyError).

Alternativa B — ✅ Correta ⟵ GABARITO

imoveisContas = pd.merge(imoveis, contas, on='idImovel')
totalConsumo = imoveisContas.groupby('idCliente')['consumo'].sum()

Faz o merge corretamente pela chave idImovel (presente em ambas) e depois agrupa pelo idCliente que veio de imoveis. Resultado correto.

Alternativa C — ❌ Incorreta

clientes.merge(contas, on='idCliente') – As tabelas clientes e contas não compartilham a coluna idCliente. A coluna idCliente está em imoveis, não em contas. Esse merge falharia (KeyError) ou, se ignorarmos, não produziria o vínculo correto.

Alternativa D — ❌ Incorreta

contas.groupby('idImovel')['consumo'].sum() – Agrupa por imóvel, não por cliente. Um cliente pode ter vários imóveis, então o resultado seria o consumo por imóvel, não por cliente.

Alternativa E — ❌ Incorreta

imoveisContas = pd.merge(contas, imoveis, on='idCliente')

O merge tenta usar on='idCliente', mas contas não possui essa coluna. Além disso, agrupa por idImovel, novamente sem chegar ao cliente.

NÃO CAIA NESSA!

A banca explora o conhecimento das chaves estrangeiras e a necessidade de percorrer o relacionamento. Várias alternativas tentam pular etapas (A, C) ou agrupar por nível intermediário (D, E). Lembre-se: para agregar por cliente, primeiro junte as tabelas que ligam cliente à conta usando a ponte imoveis.

Gabarito: letra B.

Link permanente: /questoes/ce196331