J'ai le problème suivant: J'ai deux pandas trames de données de longueur différente contenant des lignes et des colonnes qui ont des valeurs communes et d'autres qui sont différentes, comme ceci:
df1: df2:
Column1 Column2 Column3 ColumnA ColumnB ColumnC
0 a x x 0 c y y
1 c x x 1 e z z
2 e x x 2 a s s
3 d x x 3 d f f
4 h x x
5 k x x
Ce que je veux faire maintenant, c'est fusionner les deux dataframes de sorte que si ColumnA et Column1 ont la même valeur, les lignes de df2 sont ajoutées à la ligne correspondante dans df1, comme ceci:
df1:
Column1 Column2 Column3 ColumnB ColumnC
0 a x x s s
1 c x x y y
2 e x x z z
3 d x x f f
4 h x x NaN NaN
5 k x x NaN NaN
Je sais que la fusion est réalisable
df1.merge(df2,left_on='Column1', right_on='ColumnA')
mais cette commande supprime toutes les lignes qui ne sont pas les mêmes dans Column1 et ColumnA dans les deux fichiers. Au lieu de cela, je veux conserver ces lignes dans df1 et leur affecter simplement NaN dans les colonnes où d'autres lignes ont une valeur de df2, comme indiqué ci-dessus. Existe-t-il un moyen simple de le faire chez les pandas?
Merci d'avance!
Vous pouvez lire la documentation ici: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html
Ce que vous recherchez est une jointure gauche. L'option par défaut est une jointure interne. Vous pouvez modifier ce comportement en passant un argument how différent:
df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA')
On dirait que vous cherchez quelque chose comme une jointure gauche. Voyez si cet exemple aide: http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html#left-outer-join
Vous pouvez essentiellement passer un paramètre à merge()
appelé how='left'
Vous pouvez aussi simplement utiliser la fusion avec l'utilisation de on et list
result = df1.merge(df2, on=['Column1'])
Pour plus d'informations, suivez lien