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
4 Réponses :
C'est tout ce que vous avez à faire !!
pd.concat([df,df1], axis=0, ignore_index=True)
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)
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"
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')
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)
D'où proviennent les valeurs de col4 et col5. Je ne les vois pas dans
df1. Ce que je pense que vous voulez, c'estdf.merge (df1, on = ['col1', 'col2', 'col3'], how = 'left')