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!

19
demandé sur sequence_hard 2015-10-12 20:24:16

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')
18
répondu Sina 2018-01-26 03:06:12

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'

6
répondu sgrg 2015-10-12 17:31:44

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

4
répondu Nirali Khoda 2017-07-31 05:00:47