2
respostas

Pré-processamento dos dados

Boa Tarde,

Eu tenho um dataframe em que de duas variáveis eu preciso criar uma terceira: df['ano_ingresso'] = (2017, 2018, 2019, 2020, 2021) e df['periodo_ingresso'] = (1, 2) - para primeiro e segundo semestre, as duas variáveis são do tipo inteiro.

Primeiro eu gostaria de criar uma terceira variável chamada df['ingresso_discente'] a qual teria uma justaposição das duas, onde ficaria = 1/2017, 2/2017, 1/2018....e assim por diante. Eu transformei as duas variáveis do dataframe em listas onde: df['ano_ingresso'] = ingresso2 e, df['periodo_ingresso'] = ingresso1 e tentei fazer a junção desta forma: ingresso3 = str(ingresso1) + '/' + str(ingresso2)

e também tentei fazer desta outra forma:


ingresso3 = []
for i in range(len(ingresso1)):
    ingresso2[ingresso1[i]] = ingresso2[i]
ingresso3

mas nenhuma das duas funcionou, ela apenas junta as duas variáveis em 1 só dobrando o número de elementos na lista.

Segundo, eu teria que calcular o semestre atual do aluno, então se o aluno entrou em 02/2021, por exemplo, o aluno estaria atualmente (01/2022) no semestre 2. Se o aluno entrou em 01/2021 atualmente estaria no semestre 3 e assim por diante.

2 respostas

Primeira parte resolvida

Oi, Aline! Tudo bem?

Desculpa a demora em te trazer um retorno.

Pelo o que entendi da segunda parte, o cálculo do semestre é feito pela quantidade de meses, de modo que podemos definir o semestre da sua aplicação pelo seguinte cálculo:

semetre = (((quantidade_de anos)*12+(quantidade_de_meses))/6)+1

Eu estou correta? Se sim, implementei um código que representa essa equação e testei com os valores que você me trouxe. Os dados:

import pandas as pd
import datetime

df = pd.DataFrame({'data':['02/2021','01/2021']}) # data de exemplos fornecidas
df['data'] = pd.to_datetime(df['data'], format="%m/%Y")
today = datetime.datetime.strptime('01/2022', '%m/%Y') # referencia da data atual que você forneceu
df

Dados:

data
002/2021
101/2021

Aplicando a equação aos dados com o uso de datetime:

semester = ((((today.year - df.data.dt.year) * 12 + (today.month - df.data.dt.month))/6)+1).astype(int) # tipo int para os valores não serem fracionados
df['semestre'] = semester
df

Com isso, o resultado que obtemos é o seguinte:

datasemestre
002/20212
101/20213

Espero ter te ajudado. Bons estudos!