Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Gerar e concatenar dataframe (uma dúvida NÃO relacionada com a aula)

Pessoal, bom dia!

Se alguém puder me ajudar com minha dúvida, ficarei grato. Após várias aulas, resolvi criar um "programa" próprio para testar o que os apostadores de loterias chamam de "Fechamento combinatório".

Para entender, vamos usar um exemplo da Mega Sena: Se eu escolher 07 das 60 dezenas disponíveis, poderei fazer 7 combinações possíveis agrupando de 6 em 6 dezenas. Até aí tudo bem.

Então suponhamos que eu jogo essas 7 combinações e consigo acertar 4 daqueles 7 números que escolhi para combiná-los - nesse caso, existe 100% de certeza que ao menos 03 das minhas combinações darão quadra (conferir tabela de probabilidades das loterias).

Pois bem, criei um script para testar se isso é verdadeiro, sendo que o output do script é printar na tela, primeiro, se realmente alguma das minhas combinações deu quadra (True ou False) e ao lado eu printo quantas dezenas foram acertadas em cada uma das combinações (nesse exemplo, 7 combinações possíveis). Se rodar o script abaixo, ele funciona.

Minha dúvida: como colocar esse 'output' num DATAFRAME?

Obs: ainda sou iniciante e relevem se meu script não está muito elegante ou com excesso de comentários. Tentei ser claro.

Grato se puderem me ajudar!

import numpy as np
import random
import pandas as pd
from itertools import combinations

num_aposta = list(range(1,8))
agrupamento = 6
cont = 0
comb = []

# Gerando as combinações da variável num_aposta
for combination in combinations(num_aposta, agrupamento):
  np.array(comb.append(combination))

# Uso While para definir quantos testes realizarei variando o resultado da loteria.
while cont < 5:
  cont +=1
  num_in = list(range(1,8))
  sorteados_in = []
  num_out = list(range(8,61))
  sorteados_out = []

  # dos 7 números que escolhi para combiná-los, sempre vou acertar 4 (pois quero testar a quadra);
  for i in range(4):
    num_in_sorteado = random.choice(num_in)
    sorteados_in.append(num_in_sorteado)
    num_in.remove(num_in_sorteado)
  # 2 dezenas eu nunca acerto
  for i in range(2):
    num_out_sorteado = random.choice(num_out)
    sorteados_out.append(num_out_sorteado)
    num_out.remove(num_out_sorteado)

  # Criei o resultado concatenando as 06 dezenas acima. 
  result = sorteados_in + sorteados_out

  # Comparando as dezenas das minhas combinações com o resultado da loteria gerado.
  lista = []
  for bet in comb:
    for dezena in bet:
      lista.append(dezena in result)
  lista = np.array(lista).reshape(len(comb),agrupamento)
  df = pd.DataFrame()

  # Verificando quantas combinações deram quadra em cada teste. 
  verify = []
  confirm = []
  for j in lista:
    verify.append(sum(j))

  # Se ao menos uma das combinações acerta a quadra, resultado de 'confirm' é True
  confirm.append(4 in verify)
  print(confirm, verify)
3 respostas
solução!

Bom dia Roger, os comentários sempre são algo positivo e o seu código já está bem legal!

Para criar o DataFrame você pode ir juntando os resultados em uma lista de dicionários para só no final criar o DataFrame (marquei meus comentários com ## para facilitar a comparação):

import numpy as np
import random
import pandas as pd
from itertools import combinations

num_aposta = list(range(1,8))
agrupamento = 6
cont = 0
comb = []

## lista para acumular os resultados
df_data = []

# Gerando as combinações da variável num_aposta
for combination in combinations(num_aposta, agrupamento):
  np.array(comb.append(combination))

# Uso While para definir quantos testes realizarei variando o resultado da loteria.
while cont < 5:
  cont +=1
  num_in = list(range(1,8))
  sorteados_in = []
  num_out = list(range(8,61))
  sorteados_out = []

  # dos 7 números que escolhi para combiná-los, sempre vou acertar 4 (pois quero testar a quadra);
  for i in range(4):
    num_in_sorteado = random.choice(num_in)
    sorteados_in.append(num_in_sorteado)
    num_in.remove(num_in_sorteado)
  # 2 dezenas eu nunca acerto
  for i in range(2):
    num_out_sorteado = random.choice(num_out)
    sorteados_out.append(num_out_sorteado)
    num_out.remove(num_out_sorteado)

  # Criei o resultado concatenando as 06 dezenas acima. 
  result = sorteados_in + sorteados_out

  # Comparando as dezenas das minhas combinações com o resultado da loteria gerado.
  lista = []
  for bet in comb:
    for dezena in bet:
      lista.append(dezena in result)
  lista = np.array(lista).reshape(len(comb),agrupamento)

  # Verificando quantas combinações deram quadra em cada teste. 
  verify = []
  confirm = []
  for j in lista:
    verify.append(sum(j))

  ## Criação do dicionário com os acertos e a confirmação de quadra ou não
  data = {}
  data['results'] = verify
  data['win'] = 4 in verify

  ## Salvando o dicionário criado na lista temporária
  df_data.append(data)

  # Se ao menos uma das combinações acerta a quadra, resultado de 'confirm' é True
  confirm.append(4 in verify)
  print(confirm, verify)

## Criando o DataFrame com os dados armazenados
df = pd.DataFrame(df_data)
df

Espero ter ajudado, qualquer dúvida é só falar!

Show Lucas, utiliza um dicionário. Muito obrigado pelo apoio!

Sem problemas Roger, bons estudos!