Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvidas sobre funções

O que ela faz? iterrows()

E de uma forma mais didática, alguém poderia me explicar esse trecho do código?


id = row.id_aluno
matriculas = row.matriculas
for i in range(matriculas):
    mat = [id, np.random.choice(cursos.index, p = prob)]
    todas_matriculas.append(mat)

Estou com muita dificuldade de entender, desde já obrigado!

1 resposta
solução!

Olá, Otelmo! Tudo bom?

A função iterrows() possibilita iterar sobre cada linha (row) do seu pd.DataFrame, isto é, nós vamos analisar cada linha separadamente.

Quando precisamos utilizar algum laço de repetição forsobre o DataFrame, nós utilizamos o iterrows() para possibilitar essa ação.

E ao utilizar essa função, é retornado uma tupla com duas informações, a primeira é o índice da linha, e a segunda é o conteúdo da linha, no formato de uma Series do Pandas. Vamos observar o seguinte exemplo:

import pandas as pd

dados = {'A': [1, 2, 3],
         'B': [4, 5, 6], 
         'C': [7, 8, 9]}

df = pd.DataFrame(dados)
df

Saída:

ABC
0147
1258
2369

Se nós fizemos um print() utilizando o iterrows(),

for i in df.iterrows():
    print(i)

Nós teremos como saída três tuplas, contendo os índices e também os conteúdos de cada linha.

(0, A    1
B    4
C    7
Name: 0, dtype: int64)
(1, A    2
B    5
C    8
Name: 1, dtype: int64)
(2, A    3
B    6
C    9
Name: 2, dtype: int64)

A formação fica um pouco confusa na saída, mas observe a existência de um par de parênteses separados por vírgulas, isso são tuplas no Python. E podemos confirmar com a função type():

for i in df.iterrows():
    print(type(i))
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>

Nós podemos adicionar esses elementos a uma lista e também acessar de maneira separada.

lista = []

for i in df.iterrows():
    lista.append(i)

E se tentamos acessar um elemento qualquer, por exemplo o segundo elemento, temos uma tupla com índice da linha e o conteúdo dela:

lista[1]
(1,
 A    2
 B    5
 C    8
 Name: 1, dtype: int64)

E para acessar somente o conteúdo, também conseguimos acessar o item da tupla com lista[1][1].

A    2
B    5
C    8
Name: 1, dtype: int64


O código que você mencionou muito provavelmente utiliza o iterrows() separando o índice e o conteúdo em duas variáveis distintas, o id e o matriculas dentro do laço de repetição. Após isso, é dito que seja feito um laço de repetição que irá repetir pela mesma quantidade da variável matriculas, que possivelmente é um valor numérico, mas não temos como afirmar pois não temos mais informações de como você as construiu.

Dentro desse laço de repetição, é feito uma construção de uma lista onde o primeiro elemento é o próprio id analisado, e o restante é uma escolha aleatória sobre os índices dos cursos, levando em consideração uma probabilidade de escolha p = prob. Ao final disso, essa operação é adicionada dentro de uma lista chamada todas_matriculas.

Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

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