--- title: Boîte à outils comportant les différentes fonctions utilisées de façon récurrente dans le traitement des données keywords: fastai sidebar: home_sidebar nb_path: "notebooks/retraitement_erfs-fpr/modules/ToolBase.ipynb" ---
def foyers_fiscaux_to_individus_old(
sample_ind_origin,
sample_ff_to_merge,
to_update,
cols_declarant_principal,
new_ppl,
):
"""
Ajoute les données d'un échantillon de foyers fiscaux dans un échantillon par individus
sample_ind_origin: l' échantillon par individus originel
sample_ff_to_merge : l'échantillon de foyers fiscaux
to_update : les colonnes de sample_ff_to_merge qui ont bougé et qu'on veut merger
cols_declarant_principal : les colonnes que l'on ne donne qu'au déclarant principal de chaque foyer
new_ppl=True : on peut le mettre à False si est sûrs qu'on n'a ajouté personne entre-temps (par exemple en calib)
et qu'on veut gagner du temps de calcul
"""
sample_individus_new = sample_ind_origin.copy(deep=True)
print(
"Il s'agit ici de fusionner un échantillon de ",
sample_ff_to_merge["idfoy"].nunique(),
" foyers fiscaux, dans notre base qui en contient déjà ",
sample_ind_origin["idfoy"].nunique(),
)
# 1 On commence par le cas où l'on a des gens 'ajoutés'
if new_ppl is True:
# On prépare l'échantillon
sample_to_concat = prepare_ff_to_concat(
sample_ind_origin, sample_ff_to_merge, to_update
)
print("Il y a ", len(sample_to_concat), " foyers à ajouter")
tc.assertEqual(len(sample_to_concat), sample_to_concat["idfoy"].nunique())
# On les ajoute à la base
sample_individus_new = pd.concat([sample_individus_new, sample_to_concat])
tc.assertEqual(
len(sample_ind_origin) + len(sample_to_concat), len(sample_individus_new)
)
print("on a bien concaténé")
# 2 On va ensuite updater les idfoy connus
# On ne garde que ce qui sera updaté
sample_ff_to_merge = sample_ff_to_merge[["idfoy"] + to_update]
# On enlève de l'échantillon individus les colonnes que l'on va ajouter
for col in to_update:
if col in sample_individus_new:
sample_individus_new = sample_individus_new.drop(col, axis=1)
# On update les valeurs dans l'échantillon par individus
sample_individus_new = pd.merge(
sample_individus_new,
sample_ff_to_merge,
left_on="idfoy",
right_on="idfoy",
indicator=False,
)
# Contrôles
if new_ppl is True:
tc.assertEqual(
sample_individus_new["idfoy"].nunique(),
sample_ind_origin["idfoy"].nunique() + sample_to_concat["idfoy"].nunique(),
)
print("On a bien concaténé les nouveaux foyers")
else:
tc.assertEqual(
sample_individus_new["idfoy"].nunique(),
sample_ind_origin["idfoy"].nunique(),
)
print("Pas d'ajout de foyers fiscaux")
# On supprime les valeurs qui ne s'appliquent qu'au déclarant principal pour les autres déclarants
for col in cols_declarant_principal:
sample_individus_new.loc[sample_individus_new["quifoy"] != 0, col] = 0
return sample_individus_new