Bonjour à tous,

Je travaille actuellement en machine learning, dans lequel je peux intégrer du code python (langage que j'apprends en autodidacte)

Je vous explique ma problématique :

En entrée de mon code python, deux dataframes :

Mon dataframe1, qui contient 2 colonnes : ID client, et une probabilité prob_forest associée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
ID       prob_forest
123         0.002
456         0.998
...             ...
La taille de ce fichier est variable (100 000 à plusieurs millions de lignes)

Dans mon dataframe2, 3 colonnes : prob_forest_quantized (centile d'une probabilité prob_forest), min et max, respectivement les bornes des probabilités sur le centile concerné :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
prob_forest_quantized  min      max
1                               0        0.012
2                             0.013    0.078
...
100                         0.962       1
Ce dataframe fera toujours au maximum 100 lignes

En sortie de ce code, j'aimerais obtenir mon dataframe1 enrichi de prob_forest_quantized en fonction des bornes du dataframe2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
ID       prob_forest     prob_forest_quantized
123         0.002                  1
456         0.998                  100
...             ...                     ...
Pour cela, j'ai créé le code Python suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
def aml_main(dataframe1, dataframe2):
#longueur des tables
       l1=len(dataframe1)
       l2=len(dataframe2)
 
    # Initialisation
       dataframe1.loc[:,"prob_forest_quantized"]=0
 
    # pour chaque ligne du df1
       for i in xrange(l1):
              # Pour chaque ligne du df2
              for j in xrange(l2) :
                     # Si la valeur de la probabilité dans df1 est comprise entre les bornes min et max de la ligne j de df2
                     if dataframe1.loc[i, "prob_forest"]>=dataframe2.loc[j,"min"] and dataframe1.loc[i, "prob_forest"]<= dataframe2.loc[j, "max"] :
                            # définir la variable prob_forest_quantized de df1 avec la valeur de prob_forest_quantized de la ligne j de df2
                            dataframe1.loc[i, "prob_forest_quantized"]=dataframe2.loc[j,"prob_forest_quantized"]
Celui-ci fonctionne, mais avec les deux boucles + le if, c'est très long à tourner (ça tourne depuis actuellement 3h sur 4 codes Python en parallèle, sur un dataframe1 de 100 000 lignes).

Vous serait-il possible de m'aider à optimiser ce code? (grâce à des fonctions peut-être...)

Merci d'avance pour votre aide!

Bonne journée