import pandas as pd


def creaDataFrame(url):
    df = pd.read_csv(url, sep=';')
    return df

def filtraFiles(dt):
    dtnou = dt[pd.notnull(dt['Nom Municipi'])& (dt['Nom Municipi']!='Barcelona')]
    return dtnou

def filtraColumnes(dt):
    dtnou =  dt[['Nom Municipi', 'Sigles', 'Vots']]
    return dtnou

def filtraPerMunicipi(dt, substring):
    dtnou = dt[dt['Nom Municipi'].str.contains(substring)]
    return dtnou

def ordenaDades_1(df):
    gb1 = df.groupby(['Nom Municipi'])
    df2 = gb1.agg({'Vots': 'idxmax'})
    df3 = df2.rename(columns={'Vots': 'idxmax'})
    df4 = df3.join(df, on='idxmax')
    df5 = df4[['Sigles']]
    return df5

def ordenaDades_2(df):
    gb1 = df.groupby(['Nom Municipi'])
    s1 = gb1['Vots'].idxmax()
    df2 = df.loc[s1]
    df3 = df2[['Nom Municipi', 'Sigles']]
    df4 = df3.set_index('Nom Municipi')
    return df4

def ordenaDades_3(df):
    """
    les candidatures estan ordenades per vots decreixents dins de 
    cada municipi. Si no ho estiguessin, primer caldria ordenar el 
    df per la columna 'Vots' en ordre decreixent
    """
    gb = df.groupby('Nom Municipi')
    df2 = gb.first()
    del df2['Vots']
    return df2
#
# Tria la solució que vulguis provar
#
# ordenaDades = ordenaDades_1
# ordenaDades = ordenaDades_2
ordenaDades = ordenaDades_3

def llistaMunicipis(df, sigles):
    df2 = filtraFiles(df)
    df3 = filtraColumnes(df2)
    df4 = ordenaDades(df3)
    df5 = df4[df4['Sigles'].str.contains(sigles)]
    return sorted(df5.index)
