Código fuente para elecu.extract_values
import pandas as pd
import numpy as np
import os
#get the current directory
current_directory = os.path.dirname(os.path.abspath(__file__))
# establishes it as the current directory
os.chdir(current_directory)
[documentos]
def extract_eleccion(df_resultados,dignidad_codigo=None,territorio_codigo=None,agrupar_por_territorio=None,sexo=None,vuelta=None):
"""
Extrae los valores de la elección de acuerdo a los parámetros de entrada
Parameters
----------
df_resultados : DataFrame
DataFrame con los resultados de la elección
dignidad_codigo : int
Código de la dignidad a filtrar
territorio_codigo : str
Código del territorio a filtrar (provincia, cantón, parroquia)
agrupar_por_territorio : str
Agrupar los resultados por territorio (PAIS, PROVINCIA, CANTON, CIRCUNSCRIPCION, PARROQUIA)
sexo : str
Sexo a filtrar (S0, S1, AMBOS, AGRUPAR)
vuelta : int
Vuelta a filtrar(1, 2,None)
Returns
-------
DataFrame
DataFrame con los resultados de la elección filtrados
Examples
--------
>>> df_resultados = pd.read_csv("test_2023_eleccion.csv")
>>> df_resultados_filtered = extract_eleccion(df_resultados, dignidad_codigo=1, territorio_codigo="P01",agrupar_por_territorio="PROVINCIA", sexo="AMBOS", vuelta=None)
>>> print(df_resultados_filtered)
>>> PROVINCIA_CODIGO OP_CODIGO CANDIDATO_NOMBRE SEXO VUELTA VOTOS
>>> P01 18.0 FERNANDO VILLAVICENCIO S0 1 36890
>>> P01 18.0 FERNANDO VILLAVICENCIO S1 1 44222
>>> ... ... ... ... ... ...
"""
columnas_agrupar= ['SEXO', 'VUELTA']
if "CANDIDATO_NOMBRE" in df_resultados.columns:
columnas_agrupar.insert(0, "CANDIDATO_NOMBRE")
if "CANDIDATO_CODIGO" in df_resultados.columns:
columnas_agrupar.insert(0, "CANDIDATO_CODIGO")
if "OP_CODIGO" in df_resultados.columns:
columnas_agrupar.insert(0, "OP_CODIGO")
# Filter by dignidad
if dignidad_codigo is not None:
df_resultados = df_resultados[df_resultados['DIGNIDAD_CODIGO'] == dignidad_codigo]
# Filter by territory
if territorio_codigo is not None:
if territorio_codigo.startswith('P'):
df_resultados = df_resultados[df_resultados['PROVINCIA_CODIGO'] == territorio_codigo]
if territorio_codigo.startswith('C'):
df_resultados = df_resultados[df_resultados['CANTON_CODIGO'] == territorio_codigo]
if territorio_codigo.startswith('Q'):
df_resultados = df_resultados[df_resultados['PARROQUIA_CODIGO'] == territorio_codigo]
if agrupar_por_territorio is not None:
if agrupar_por_territorio == 'PAIS':
pass
if agrupar_por_territorio == 'PROVINCIA':
columnas_agrupar.insert(0, 'PROVINCIA_CODIGO')
if agrupar_por_territorio == 'CANTON':
columnas_agrupar.insert(0, 'CANTON_CODIGO')
if agrupar_por_territorio == 'CIRCUNSCRIPCION':
columnas_agrupar.insert(0, 'CIRCUNSCRIPCION_CODIGO')
if agrupar_por_territorio == 'PARROQUIA':
columnas_agrupar.insert(0, 'PARROQUIA_CODIGO')
df_resultados= df_resultados.groupby(columnas_agrupar)['VOTOS'].sum().reset_index()
if sexo is not None:
if sexo == 'S0' or sexo=="S1":
df_resultados = df_resultados[df_resultados['SEXO'] == sexo]
if sexo== "AMBOS":
pass
if sexo== "AGRUPAR":
#delete the "SEXO" column in columnas_agrupar
columnas_agrupar.remove('SEXO')
df_resultados = df_resultados.groupby(columnas_agrupar)['VOTOS'].sum().reset_index()
if vuelta is not None:
df_resultados = df_resultados[df_resultados['VUELTA'] == vuelta]
else:
pass
return df_resultados