2
respostas

[Projeto] Cliente: Desafio Resolução

Vendas Online

# Transformar a data em datetime
# está no tipo objeto
df['Data de venda'].info()

df['Data de venda'] = pd.to_datetime(df['Data de venda'])
df.info()

df['Data de venda'].dt.strftime('%d/%m/%Y')

df.head()

# os nomes dos clientes estavam em uma lista, portanto não
# poderiam ser manipulados corretamente, então fiz um join para facilitar.
df['Cliente'] = df['Cliente'].apply(lambda x: ' '.join(x))

total_compras = df.groupby(['Cliente'])['Valor da compra'].sum()
total_compras.sort_values(ascending=False)

isabely joanes    2329.30 foi a que gastou mais.

Eu tentei, a principio, usar o atributo .max() e .idxmax() para conseguir uma única linha que me retornasse o resultado desejado "isabely joanes 2329.30", mas não consegui. Como faço isso?

2 respostas
# no caso, eu não consegui simplesmente fazer:
# data['datas_combinadas_pagamento'] = pd.to_datetime(data['datas_combinadas_pagamento'])
# por que o formato da data estava errado antes de fazer essa conversão, então tenho que especificar 
# o formato desejado antes ex: format='%d/%m/%Y'

data['datas_combinadas_pagamento'] = pd.to_datetime(data['datas_combinadas_pagamento'], format='%d/%m/%Y')
data['datas_de_pagamento'] = pd.to_datetime(data['datas_de_pagamento'], format='%d/%m/%Y')

# para resolver o problema do projeto temos que calcular a diferença de dias dos pagamentos
# usar o dt.days para definir a diferença entre DIAS

data['diferenca_dias'] = (data['datas_de_pagamento'] - data['datas_combinadas_pagamento']).dt.days
data

# calcular a media de atraso dos pagamentos dos apartamentos
media = data.groupby(['apartamento'])['diferenca_dias'].mean()
media

Olá, Gabriel, tudo bem?

Em relação a transformar os dados para o tipo datetime, você poderá consultar a opinião do instrutor aqui.

Quanto a encontrar o cliente que mais gastou, você pode usar o método .idxmax() para obter o índice (nome do cliente) e .max() para obter o valor máximo. Deixo o código abaixo como sugestão:

import pandas as pd

# Supondo que total_compras já foi calculado
# total_compras = df.groupby(['Cliente'])['Valor da compra'].sum()

# Encontrar o cliente que mais gastou
cliente_max_gasto = total_compras.idxmax()
valor_max_gasto = total_compras.max()

# Exibir o resultado
print(f"{cliente_max_gasto} {valor_max_gasto:.2f}")

Esse código deve retornar exatamente o que você deseja: o nome do cliente e o valor total gasto.

Espero ter ajudado.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!