Fusionner deux bases de données Python pandas de longueur différente mais garder toutes les lignes dans la base de données de sortie
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érents, 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 faisable par df1.merge(df2,left_on='Column1', right_on='ColumnA')
, mais cette commande supprime toutes les lignes qui ne sont pas les mêmes dans la Colonne1 et Colonnna dans les deux fichiers. Au lieu de cela, je veux garder ces lignes dans df1 et leur assigner NaN dans les colonnes où les autres lignes ont une valeur de df2, comme indiqué ci-dessus. Y a-t-il une façon douce de faire cela dans les pandas?
Merci d'avance!
3 réponses
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 différent:
df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA')
on dirait que vous cherchez quelque chose comme un gaucher. Voyez si cet exemple aide: http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html#left-outer-join
vous pouvez passer un paramètre àmerge()
how='left'
Vous pouvez simplement utiliser merge avec l'utilisation on et list aussi bien
result = df1.merge(df2, on=['Column1'])
Pour plus d'informations, suivre lien