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!