def calage_viellissement_depenses(year_data, year_calage, depenses, masses):
    depenses_calees = pandas.DataFrame()
    coicop_list = set(depenses.columns)
    # print coicop_list
    coicop_list.remove('pondmen')
    for column in coicop_list:
        coicop = normalize_coicop(column)
        grosposte = int(coicop[0:2])
#        print column, coicop, grosposte
# RAPPEL : 12 postes CN et COICOP
#    01 Produits alimentaires et boissons non alcoolisées
#    02 Boissons alcoolisées et tabac
#    03 Articles d'habillement et chaussures
#    04 Logement, eau, gaz, électricité et autres combustibles
#    05 Meubles, articles de ménage et entretien courant de l'habitation
#    06 Santé
#    07 Transports
#    08 Communication
#    09 Loisir et culture
#    10 Education
#    11 Hotels, cafés, restaurants
#    12 Biens et services divers
        if grosposte != 99:
            #  print 'grosposte: ', grosposte
            #  print masses
            ratio_bdf_cn = masses.at[grosposte, 'ratio_bdf{}_cn{}'.format(year_data, year_data)]
            ratio_cn_cn = masses.at[grosposte, 'ratio_cn{}_cn{}'.format(year_data, year_calage)]
            depenses_calees[column] = depenses[column] * ratio_bdf_cn * ratio_cn_cn
            #  print 'Pour le grosposte {}, le ratio de calage de la base bdf {} sur la cn est {}, le ratio de calage sur la cn pour l\'annee {} est {}'.format(grosposte, year_data, ratio_bdf_cn, year_calage,ratio_cn_cn)
    return depenses_calees
 def select_gros_postes(coicop):
     try:
         coicop = unicode(coicop)
     except:
         coicop = coicop
     normalized_coicop = normalize_coicop(coicop)
     grosposte = normalized_coicop[0:2]
     return int(grosposte)
def build_menage_consumption_by_categorie_fiscale(temporary_store=None, year_calage=None, year_data=None):
    """Build menage consumption by categorie fiscale dataframe """
    assert temporary_store is not None
    assert year_calage is not None
    assert year_data is not None

    # Load matrices de passage
    matrice_passage_data_frame, selected_parametres_fiscalite_data_frame = get_transfert_data_frames(year=year_data)

    # Load data
    coicop_data_frame = temporary_store["depenses_calees_{}".format(year_calage)]

    # Grouping by categorie_fiscale
    selected_parametres_fiscalite_data_frame = selected_parametres_fiscalite_data_frame[
        ["posteCOICOP", "categoriefiscale"]
    ]
    # print selected_parametres_fiscalite_data_frame
    selected_parametres_fiscalite_data_frame.set_index("posteCOICOP", inplace=True)

    # Normalisation des coicop de la feuille excel pour être cohérent avec depenses_calees
    normalized_coicop = [normalize_coicop(coicop) for coicop in selected_parametres_fiscalite_data_frame.index]
    selected_parametres_fiscalite_data_frame.index = normalized_coicop
    categorie_fiscale_by_coicop = selected_parametres_fiscalite_data_frame.to_dict()["categoriefiscale"]
    for key in categorie_fiscale_by_coicop.keys():
        import math

        if not math.isnan(categorie_fiscale_by_coicop[key]):
            categorie_fiscale_by_coicop[key] = int(categorie_fiscale_by_coicop[key])
        if math.isnan(categorie_fiscale_by_coicop[key]):
            categorie_fiscale_by_coicop[key] = 0
        assert type(categorie_fiscale_by_coicop[key]) == int

    # print categorie_fiscale_by_coicop
    categorie_fiscale_labels = [categorie_fiscale_by_coicop.get(coicop) for coicop in coicop_data_frame.columns]
    # TODO: gérer les catégorie fiscales "None" = dépenses énergétiques (4) & tabac (2)
    #    print categorie_fiscale_labels
    tuples = zip(categorie_fiscale_labels, coicop_data_frame.columns)
    coicop_data_frame.columns = pandas.MultiIndex.from_tuples(tuples, names=["categoriefiscale", "coicop"])
    # print coicop_data_frame.columns

    categorie_fiscale_data_frame = coicop_data_frame.groupby(level=0, axis=1).sum()
    rename_columns = dict(
        [(number, "categorie_fiscale_{}".format(number)) for number in categorie_fiscale_data_frame.columns]
    )
    categorie_fiscale_data_frame.rename(columns=rename_columns, inplace=True)
    categorie_fiscale_data_frame["role_menage"] = 0
    #    categorie_fiscale_data_frame.reset_index(inplace = True)
    categorie_fiscale_data_frame.index = categorie_fiscale_data_frame.index.astype(ident_men_dtype)
    temporary_store["menage_consumption_by_categorie_fiscale_{}".format(year_calage)] = categorie_fiscale_data_frame