Newer
Older
df_eleicao = pd.read_csv('eleicao.csv', delimiter=';')
# 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
# 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'])
# 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")