1
votes

Pandas - Fusion d'un dataframe

Je suis nouveau dans les pandas et je souhaite fusionner deux dataframes mais je ne sais pas comment procéder correctement. J'ai donc deux dataframe df et df1, où df1 est un sous-ensemble de df. J'ai effectué différentes opérations sur df1 et j'ai de nouvelles colonnes et je veux les fusionner avec df.

   Index col1 col2  col3  col4   col5 
     1    a    1234  5a     nan   nan
     2    b    3456  c4     nan   nan
     3    c    3613  9y     qwrt  hkjg           
     4    d    9103  0l     nan   nan
     5    e    8133  9m     asdf  jgnm
     6    f    6790  7h     asdf  sajf

Je commence par df et df1 et j'applique une opération à df1 qui se traduit par :

    df1
    Index col1 col2  col3  col4  col5  
     3    c    3613  9y    qwrt  hkjg
     5    e    8133  9m    asdf  jgnm
     6    f    6790  7h    asdf  sajf

Ma question est maintenant de savoir comment fusionner df1 dans df basé sur col1 pour donner quelque chose comme ça (en ajoutant essentiellement des nans aux colonnes qui ne faisaient pas partie de df1 et en préservant l'ordre du dataframe d'origine df)

   df
   Index col1 col2  col3                  
     1    a    1234  5a
     2    b    3456  c4
     3    c    3613  9y
     4    d    9103  0l
     5    e    8133  9m
     6    f    6790  7h

  df1
  Index col1 col2  col3            
     3    c    3613  9y
     5    e    8133  9m
     6    f    6790  7h


1 commentaires

D'où proviennent les valeurs de col4 et col5. Je ne les vois pas dans df1 . Ce que je pense que vous voulez, c'est df.merge (df1, on = ['col1', 'col2', 'col3'], how = 'left')


4 Réponses :


0
votes

C'est tout ce que vous avez à faire !!

pd.concat([df,df1], axis=0, ignore_index=True)


0 commentaires

0
votes

vous pouvez le faire, où "col4" et "col5" sont des colonnes ajoutées après vos opérations

df.update(df1)
pd.concat([df,df1[["col4", "col5"]]], axis=1, sort=False)

Si vous souhaitez également mettre à jour les valeurs de col1 et col2 de df1 à df2, utilisez

df = pd.DataFrame([('1', 'a', '1234', '5a'), ('2', 'b', '3456', 'c4'), ('3', 'c', '3613', '9y'), ('4', 'd', '9103', '0l'), ('5', 'e', '8133', '9m'), ('6', 'f', '6790', '7h')], columns=('Index', 'col1', 'col2', 'col3'))
df1 = pd.DataFrame([('3', 'c', '3613', '9y', 'qwrt', 'hkjg'), ('5', 'e', '8133', '9m', 'asdf', 'jgnm'), ('6', 'f', '6790', '7h', 'asdf', 'sajf')], columns=('Index', 'col1', 'col2', 'col3', 'col4', 'col5'))
df = df.set_index("Index")
df1 = df1.set_index("Index")

pd.concat([df,df1[["col4", "col5"]]], axis=1, sort=False)


6 commentaires

Avez-vous vérifié la sortie?


oui, la colonne "Index" des utilisateurs est en fait un index comme dans l'exemple ci-dessus, donc cela fonctionnera. plz essayez l'exemple complet ci-dessus @Erfan


Où voyez-vous col4 et col5 dans df1?


voir dans la question utilisateur "Je commence avec df et df1 et j'applique une opération à df1 qui se traduit par:" après que df1 a ces colonnes


Non, c'est ce qu'il a en sortie, qui est la sortie incorrecte.


ce que j'obtiens du test ci-dessus est différent, il a df et df1, après un certain traitement sur df1, il obtient le 2e df1 qu'il veut fusionner avec df. Donc, ses questions commencent après que df1 a "col4" et "col5"



2
votes

IIUC, vous avez besoin de cette

index   col1    col2    col3    col4    col5
0   1   a   1234    5a  NaN     NaN
1   2   b   3456    c4  NaN     NaN
2   3   c   3613    9y  qwrt    hkjg
3   4   d   9103    0l  NaN     NaN
4   5   e   8133    9m  asdf    jgnm
5   6   f   6790    7h  asdf    sajf

Sortie

df.merge(df1, how='outer')


0 commentaires

0
votes

Si vous utilisez le sous-ensemble de votre dataframe, vous n'avez pas besoin de fusionner:

   A  B    C
0  5  0  NaN
1  7  7  8.0
2  7  4  5.0
3  8  4  NaN

Sortie:

df['C'] = df.loc[1:2, 'B'] + 1
print(df)

Vous pouvez loc votre sous-ensemble et ajoutez une nouvelle colonne:

   A  B
0  5  0
1  7  7
2  7  4
3  8  4

Sortie:

df = pd.DataFrame(np.random.randint(10, size=(4, 2)), columns=list('AB'))
print(df)


0 commentaires