Skip to content
Snippets Groups Projects
prova.py 2.3 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
votos_coligacao = df_eleicao.groupby(['Partido/Coligação']).sum()

# cálculo do Quociente partidário
votos_coligacao['QP'] = votos_coligacao['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 - votos_coligacao['QP'].sum()

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

# criando uma nova coluna para a distribuição.
votos_coligacao = votos_coligacao.assign(VagasResiduais = votos_coligacao['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
    votos_coligacao['Media'] = votos_coligacao['Votos']/(votos_coligacao['VagasResiduais']+1)
    # verifica a média máxima
    votos_coligacao.loc[votos_coligacao['Media'] == votos_coligacao['Media'].max(), 'VagasResiduais'] +=1

# limpando os dados (removendo colunas descenessárias a partir de agora)
votos_coligacao.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 coligacao in votos_coligacao.itertuples():
    # coligacao[0] é o index(nome da coligacao) e coligacao[2] é a quantidade de vagas
    # pega os n primeiros de cada coligação de acordo com as vagas
    resultado = resultado.append(df_eleicao.loc[df_eleicao['Partido/Coligação'] == coligacao[0]].iloc[:coligacao[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")