1
resposta

Dúvida quanto ao "item'

Fiz o exercício de outra forma (mais poluída), mas consegui resolve-lo. Depois tentei mesclar o que fiz com a alternativa certa, mas ele apresenta KeyError: 'item'.

Queria entender melhor o trecho abaixo da resposta:

for item in moedas:
    df = pd.concat([df, moedas[item].value_counts()], 
                    axis = 1)

Os itens apontados em "moeda[item]" seriam as listas list(m1), list(m2), list(m3), list(m4), list(m5) indicadas no dicionário eventos?

Outra dúvida de que tenho é sobre o Data Frame inicial. A resposta do exercício a cria utilizando:

eventos = {'m1': list(m1), 
            'm2': list(m2), 
            'm3': list(m3), 
            'm4': list(m4), 
            'm5': list(m5)}
moedas = pd.DataFrame(eventos)

Criei o Data Frame inicial conforme abaixo:

r = list(zip(m1, m2, m3, m4, m5)
r1 = pd.DataFrame(r, columns = ['m1', 'm2', 'm3', 'm4', 'm5'])

Em aparência ambos trazem exatamente o mesmo Data Frame, mas gostaria de saber se há diferença quanto suas utilizações.

1 resposta

Olá Marcelo como vc está? Tudo certinho?

Vamos analisar a solução correta e discutir sobre os pontos e suas dúvidas:

import pandas as pd


m1 = 'CCcCCccCCCccCcCccCcCcCCCcCCcccCCcCcCcCcccCCcCcccCc'
m2 = 'CCCCCccCccCcCCCCccCccccCccCccCCcCccCcCcCCcCccCccCc'
m3 = 'CccCCccCcCCCCCCCCCCcccCccCCCCCCccCCCcccCCCcCCcccCC'
m4 = 'cCCccCCccCCccCCccccCcCcCcCcCcCcCCCCccccCCCcCCcCCCC'
m5 = 'CCCcCcCcCcCCCcCCcCcCCccCcCCcccCccCCcCcCcCcCcccccCc'


eventos = {'m1': list(m1), 
            'm2': list(m2), 
            'm3': list(m3), 
            'm4': list(m4), 
            'm5': list(m5)}

moedas = pd.DataFrame(eventos)

df = pd.DataFrame(data = ['Cara', 'Coroa'], 
                    index = ['c', 'C'], 
                    columns = ['Faces'])

for item in moedas:
    df = pd.concat([df, moedas[item].value_counts()], 
                    axis = 1)
df


Output: 

Faces    m1    m2    m3    m4    m5
c    Cara    25    26    19    23    25
C    Coroa    25    24    31    27    25

Primeiro importamos o pandas, então definimos os valores das variáveis (m1, m2, m3, m4 e m5) baseadas nos resultados de jogadas de cada moeda. Criamos um dicionário (tipo de lista de dados em python) chamado eventos e então o DataFrame (df) o qual atribuiremos o resultado. Até aí td bem?

Para tal foi feito um pd.concat que possuí a função de "Juntar" uma informação com outra, no nosso caso, uma Series, ou colunas. Você pode observar mais aqui na documentação.

Conforme a resposta da questão, "o value_counts() é uma funcionalidade aplicável somente a Series e, por isso, precisamos executar o código para cada coluna do DataFrame, individualmente."

As diferenças de listas existentes em python você pode observar aqui.

Deixo também, um artigo da Alura a respeito de dicionários.

"Os itens apontados em "moeda[item]" seriam as listas list(m1), list(m2), list(m3), list(m4), list(m5) indicadas no dicionário eventos?"

O Item ali trata-se de cada Serie que será encontrado em moedas, poderia ser "x" por exemplo.

"Em aparência ambos trazem exatamente o mesmo Data Frame, mas gostaria de saber se há diferença quanto suas utilizações."

No seu eu senti falta de um parenteses para fechar

r = list(zip(m1, m2, m3, m4, m5))

e se rodar aqui

rf = pd.DataFrame(r, columns = ['m1', 'm2', 'm3', 'm4', 'm5'])  
rf

m1    m2    m3    m4    m5
0    C    C    C    c    C
1    C    C    c    C    C
2    c    C    c    C    C
3    C    C    C    c    c
4    C    C    C    c    C
5    c    c    c    C    c
6    c    c    c    C    C
7    C    C    C    c    c
8    C    c    c    c    C
9    C    c    C    C    c
10    c    C    C    C    C
11    c    c    C    c    C
12    C    C    C    c    C
13    c    C    C    C    c
14    C    C    C    C    C
15    c    C    C    c    C
16    c    c    C    c    c
17    C    c    C    c    C
18    c    C    C    c    c
19    C    c    c    C    C
20    c    c    c    c    C
21    C    c    c    C    c
22    C    c    C    c    c
23    C    C    c    C    C
24    c    c    c    c    c
25    C    c    C    C    C
26    C    C    C    c    C
27    c    c    C    C    c
28    c    c    C    c    c
29    c    C    C    C    c
30    C    C    C    c    C
31    C    c    c    C    c
32    c    C    c    C    c
33    C    c    C    C    C
34    c    c    C    C    C
35    C    C    C    c    c
36    c    c    c    c    C
37    C    C    c    c    c
38    c    c    c    c    C
39    c    C    C    C    c
40    c    C    C    C    C
41    C    c    C    C    c
42    C    C    c    c    C
43    c    c    C    C    c
44    C    c    C    C    c
45    c    C    c    c    c
46    c    c    c    C    c
47    c    c    c    C    c
48    C    C    C    C    C
49    c    c    C    C    c

Por isso precisamos concatenar os resultados, assim temos todas essas possibilidades representadas como na respostas acima:

Output: 

Faces    m1    m2    m3    m4    m5
c    Cara    25    26    19    23    25
C    Coroa    25    24    31    27    25

Entendeu? Dá uma olhadinha tbm nas diferenças entre listas de dados (listas, tuplas e dicionários)

Espero ter te ajudado Marcelo e qualquer dúvida que ainda permanecer ou futura, é só retornar aqui!