Skip to content
Snippets Groups Projects
prova.py 1.98 KiB
Newer Older
Epitacio Bessa da Silva's avatar
Epitacio Bessa da Silva committed
import pandas as pd

df_eleicao = pd.read_csv('eleicao.csv', delimiter=';')
Epitacio Bessa da Silva's avatar
Epitacio Bessa da Silva committed
total_cadeiras = 29
QE = 12684

# retira o 'partido' da coligacao(partido-coligacao) 
def separar_coligacao(partido_coligacao):
    partido_coligacao = partido_coligacao.split('-')
    # o strip remove os espaços do início e fim
    return partido_coligacao[1].strip() if len(partido_coligacao) > 1 else partido_coligacao[0].strip()
    
# aplicando a separação
df_eleicao['Partido/Coligação'] = df_eleicao['Partido/Coligação'].apply(separar_coligacao)
# agrupando e somando os votos de cada partido/coligacao
votacao = df_eleicao.groupby(['Partido/Coligação']).sum()

# cálculo do Quociente partidário
votacao['QP'] = votacao['Votos']//QE
Epitacio Bessa da Silva's avatar
Epitacio Bessa da Silva committed

# ir atualizando a quantide de vagas já preenchidas
cadeiras_restante = total_cadeiras - votacao['QP'].sum()

# removendo partidos com o QP igual a 0. Eles não participam do cálculo da média
votacao.drop(votacao[votacao['QP'] == 0].index, inplace=True)

# criando uma nova coluna para a distribuição.
votacao = votacao.assign(VagasResiduais = votacao['QP'])
Epitacio Bessa da Silva's avatar
Epitacio Bessa da Silva committed

# enquanto total_cadeiras não for atigindo, continua a calcular a media
for vagas in range(0,cadeiras_restante):
    # calculando a média
    votacao['Media'] = votacao['Votos']/(votacao['VagasResiduais']+1)
    # verifica a média máxima
    votacao.loc[votacao['Media'] == votacao['Media'].max(), 'VagasResiduais'] +=1

# limpando os dados (removendo colunas descenessárias a partir de agora)
votacao.drop(['QP','Media','Número'], inplace=True, axis=1)

# ordenando pelos votos
df_eleicao.sort_values('Votos',ascending=False,inplace=True)

# pegando o resultado da eleição
resultado = pd.DataFrame()
for i in votacao.itertuples():
    resultado = resultado.append(df_eleicao.loc[df_eleicao['Partido/Coligação'] == i[0]].iloc[:i[2]])

# ordenando os candidos em forma decrescente
resultado.sort_values('Votos',ascending=False,inplace=True)

#exportando para tsv.
resultado.to_csv('resultado_eleicao.tsv', index=False, sep="\t")