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
La taille de ce fichier est variable (100 000 à plusieurs millions de lignes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ID prob_forest 123 0.002 456 0.998 ... ...
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é :
Ce dataframe fera toujours au maximum 100 lignes
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
En sortie de ce code, j'aimerais obtenir mon dataframe1 enrichi de prob_forest_quantized en fonction des bornes du dataframe2 :
Pour cela, j'ai créé le code Python suivant :
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 ... ... ...
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).
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"]
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
Partager