Bonjour,

Je dispose de 2 dataframes.

Le premier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
df1 = pd.DataFrame({'nom_combinaison': ['Combinaison1', 'Combinaison1', 'Combinaison1', 'Combinaison2','Combinaison2', 'Combinaison2', 'Combinaison3', 'Combinaison3', 'Combinaison3'], 'prenom': ['Personne2', 'Personne3', 'Personne1', 'Personne2', 'Personne4', 'Personne1', 'Personne2', 'Personne5', 'Personne1']})
 
df2 = pd.DataFrame({'prenom': ['Personne1', 'Personne2', 'Personne3', 'Personne4', 'Personne5'], 'valeur1' : [2, 1, 1, 4, 5], 'valeur2' : [7, 4, 1, 1, 2], 'valeur3' : [1, 2, 3, 3, 1], 'valeur4' : [7, 8, 9, 4, 5], 'valeur5' : [10, 11, 12, 2, 6]})
Je souhaite joindre les valeurs de df2 dans df1.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
df1 = pd.DataFrame({'nom_combinaison': ['Combinaison1', 'Combinaison1', 'Combinaison1', 'Combinaison2','Combinaison2', 'Combinaison2', 'Combinaison3', 'Combinaison3', 'Combinaison3'], 'prenom': ['Personne2', 'Personne3', 'Personne1', 'Personne2', 'Personne4', 'Personne1', 'Personne2', 'Personne5', 'Personne1']})
 
df2 = pd.DataFrame({'prenom': ['Personne1', 'Personne2', 'Personne3', 'Personne4', 'Personne5'], 'valeur1' : [2, 1, 1], 'valeur2' : [7, 4, 1], 'valeur3' : [1, 2, 3], 'valeur4' : [7, 8, 9], 'valeur5' : [10, 11, 12]})
 
 
test = pd.merge(df1, df2, how = "outer", on = ["prenom"])
test = test.sort_values(by = ["nom_combinaison", "prenom"])
Malheureusement, j'ai des NA qui apparaissent un peu partout :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
nom_combinaison       prenom  valeur1  valeur2  valeur3
45     Combinaison_1    Personne2          NaN                NaN           NaN
54     Combinaison_1    Personne3          NaN                NaN           NaN
0      Combinaison_1    Personne1          2.0                1.0           1.0
46     Combinaison_2    Personne2          NaN                NaN           NaN
71     Combinaison_2    Personne4          NaN                NaN           NaN
1      Combinaison_2    Personne1          2.0                1.0           1.0
47     Combinaison_3    Personne2          NaN                NaN           NaN
95     Combinaison_3    Personne5          NaN                NaN           NaN
2      Combinaison_3    Personne1          2.0                1.0           1.0
Je remarque que c'est systématiquement 1 personne par combinaison qui est jointe. Le reste, jamais. Le champ "prenom" est de type Series :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
print(type(df1["prenom"]))
print(type(df2["prenom"]))
 
<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>
Bref, je n'arrive pas à comprendre... Existe t-il une autre manière de joindre ces dataframes ?
Merci.