Salut, j'ai trouvé une solution triviale en fait. C'est juste que je ne connaissais pas assez bien la bibliothèque pandas. En gros la solution est littéralement "je prend de DF2 les lignes de DF1 qui ont en commun l'attribut A mais pas l'attribut B" en sql ça se fait très facilement mais avec pandas, si ça peut aider des gens dans le futur ça ressemble à ça :
import pandas as pd
DF1 = pd.DataFrame({'A':['a1','a1','a2','a2','a3'],'B':['b0','b1','b2','b3','b5']}) # on déclare DF1
DF2 = pd.DataFrame({'A':['a1','a1','a1','a2','a2','a2','a3','a4'],
'B':['b0','b1','b9','b2','b3','b4','b5','b11'],
'C':['c0','c1','c2','c3','c4','c5','c6','c7']}) # on déclare DF2
print(DF1,"\n")
print(DF2,"\n")
print( DF2[ (DF2.A.isin(DF1.A)) & (~DF2.B.isin(DF1.B)) ] ) #on a DF3
Le 26 octobre 2019 à 19:20:55 _ZawaZawaZawa_ a écrit :
je vois pas trop d'autre solution que de parcourir ta matrice DF2, et pour chaque élément, parcourir DF1 (donc des for imbriqués en effet)
il y a probablement une syntaxe moins naze dans la doc des dataframes pandas (en interne ça refera des for imbriqués mais bon c'est plus élégant quand même de reprendre les fonctionnalités de la lib plutôt que de réimplémenter)
Effectivement pandas est beaucoup plus riche que ce que j'imaginais et leurs algorithmes sont très très bons, je sais pas s'ils font parallélisme ou font des tables de #/indexation car rien que l'équivalent d'un SELECT en sql se fait incroyablement plus rapidement avec la syntaxe pandas qu'avec une boucle for qui va bêtement parcourir ligne par ligne et garder les occurences.