2 votes

pandas fusionne les colonnes avec des valeurs nan

J'ai deux dataframes, df1 y df2

df1
  skuid brand
0  ax12     C
1  zm23     F
2  zm23   NaN
3  zm24   NaN

df2
    sid brand
0  ax11     G
1  ax12     C
2  zm23     F
3  zm23   NaN

J'ai besoin de combiner les deux cadres de données sur la base des valeurs de skuid y sid .

df1.merge(df2, how='right')
  skuid brand   sid
0  ax12     C  ax12
1  zm23     F  zm23
2  zm23   NaN  zm23
3  zm24   NaN  zm23
4   NaN     G  ax11

Comment puis-je obtenir la sortie comme indiqué ci-dessous ?

  skuid brand   sid
0  ax12     C  ax12
1  zm23     F  zm23
2  zm23   NaN   NaN
3  zm24   NaN   NaN
4   NaN   NaN  zm23
5   NaN     G  ax11

NaN valeur pour sid sur les rangs 2 et 3,

et une ligne supplémentaire pour zm23 en df2

2voto

Pourquoi voulez-vous faire ça ? Je pense que tu ne peux pas faire ça en une seule opération. Si vous utilisez 'right', vous perdez 'zm24' de df1. Si vous utilisez left, vous perdrez 'ax11' de df2. Donc vous devez utiliser 'outer', mais cela ne fera pas ce que vous voulez. Vous aurez le raw 'zm23 NaN zm23' parce que vous avez fusionné par skuid et sid. Ils sont les mêmes à ce brut. Vous pouvez fusionner vos images et ensuite faire une autre manipulation. Et je pense que vous pouvez essayer d'utiliser 'left_on' et 'right_on', mais cela ne résoudra pas votre problème.

Et si tu l'utilises, tu n'as pas de "sid" dans 3 raw.

df1.merge(df2, how='outer', left_on=['skuid', 'brand'], right_on=['sid', 'brand'])

UPD : J'ai trouvé la solution pour vous. Vous pouvez remplir des valeurs différentes avant de fusionner.

df1 = df1.fillna(0)
df2 = df2.fillna(1)
df = df1.merge(df2, how='outer', left_on=['skuid', 'brand'], right_on=['sid', 'brand'])

Si tu veux, tu peux les reconvertir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X