Je veux combiner 2 dataframes avec certaines conditions. Je pense que j'ai besoin de fonctionnalités agrégées de pd.merge et pd.concat, j'ai lu tous les exemples ici mais je n'ai toujours pas trouvé d'informations pour résoudre mon problème.
gauche:
key1 key2 valueX valueY valueX valueY A a1 1 4 7 10 B b1 2 5 nan nan B b2 nan nan 8 11 C c1 3 6 9 12
droite:
key1 key2 valueX valueY A a1 7 10 B b2 8 11 C c1 9 12
Je veux les combiner donc c'est
comme ci-dessous:
key1 key2 valueX valueY A a1 1 4 B b1 2 5 C c1 3 6
3 Réponses :
Vous ne savez pas pourquoi vous voulez des colonnes
en double, mais vous pouvez utiliser concat
Newdf=pd.concat([df1.set_index(['key1', 'key2']),df2.set_index(['key1', 'key2'] )],axis=1).\ reset_index() Newdf Out[711]: key1 key2 valueX valueY valueX valueY 0 A a1 1.0 4.0 7.0 10.0 1 B b1 2.0 5.0 NaN NaN 2 B b2 NaN NaN 8.0 11.0 3 C c1 3.0 6.0 9.0 12.0
Merci pour l'aide! mais il semble réorganiser mes clés alors j'ai accepté une autre réponse, mais merci pour l'inspiration, je ne savais pas que je pouvais définir plusieurs index avant ... Merci!
Effectuez une FULL OUTER JOIN avec merge
, puis supprimez les suffixes par la suite.
u = left.merge(right, on=['key1', 'key2'], suffixes=('', '__2'), how='outer') u.columns = u.columns.str.replace('__2', '') u key1 key2 valueX valueY valueX valueY 0 A a1 1.0 4.0 7.0 10.0 1 B b1 2.0 5.0 NaN NaN 2 C c1 3.0 6.0 9.0 12.0 3 B b2 NaN NaN 8.0 11.0
Sympa ... simple et direct .... ça résout mon problème! =) Merci !!
Vous pouvez fusionner avec l'espace comme suffixe et supprimer plus tard
new_df = df1.merge(df2, on = ['key1', 'key2'], suffixes=(' ', ' '), how = 'outer') new_df.columns = new_df.columns.str.strip() key1 key2 valueX valueY valueX valueY 0 A a1 1.0 4.0 7.0 10.0 1 B b1 2.0 5.0 NaN NaN 2 C c1 3.0 6.0 9.0 12.0 3 B b2 NaN NaN 8.0 11.0
Merci beaucoup! =)