import pandas as pd df_eleicao = pd.read_csv('eleicao.csv', delimiter=';') 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 # 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")