Pandas : comment fusionner les valeurs de plusieurs colonnes en une seule



Vous pouvez utiliser les méthodes suivantes pour regrouper les valeurs de plusieurs colonnes d’un DataFrame pandas en une seule colonne :

Méthode 1 : fusionner les valeurs par ordre de colonne par défaut

df['coalesce'] = df.bfill(axis=1).iloc[:, 0]

Méthode 2 : fusionner les valeurs en utilisant un ordre de colonne spécifique

df['coalesce'] = df[['col3', 'col1', 'col2']].bfill(axis=1).iloc[:, 0]

Les exemples suivants montrent comment utiliser chaque méthode en pratique avec le DataFrame pandas suivant :

import pandas as pd
import numpy as np

#create DataFrame
df = pd.DataFrame({'points': [np.nan, np.nan, 19, np.nan, 14],
                   'assists': [np.nan, 7, 7, 9, np.nan],
                   'rebounds': [3, 4, np.nan, np.nan, 6]})

#view DataFrame
print(df)

   points  assists  rebounds
0     NaN      NaN       3.0
1     NaN      7.0       4.0
2    19.0      7.0       NaN
3     NaN      9.0       NaN
4    14.0      NaN       6.0

Méthode 1 : fusionner les valeurs par ordre de colonne par défaut

Le code suivant montre comment fusionner les valeurs des colonnes de points, d’assistance et de rebonds en une seule colonne, en utilisant la première valeur non nulle des trois colonnes comme valeur fusionnée :

#create new column that contains first non-null value from three existing columns 
df['coalesce'] = df.bfill(axis=1).iloc[:, 0]

#view updated DataFrame
print(df)

   points  assists  rebounds  coalesce
0     NaN      NaN       3.0       3.0
1     NaN      7.0       4.0       7.0
2    19.0      7.0       NaN      19.0
3     NaN      9.0       NaN       9.0
4    14.0      NaN       6.0      14.0

Voici comment la valeur dans la colonne de fusion a été choisie :

  • Première ligne : la première valeur non nulle était 3.0 .
  • Deuxième ligne : la première valeur non nulle était 7.0 .
  • Troisième ligne : la première valeur non nulle était 19.0 .
  • Quatrième ligne : la première valeur non nulle était 9.0 .
  • Cinquième ligne : la première valeur non nulle était 14.0 .

Méthode 2 : fusionner les valeurs en utilisant un ordre de colonne spécifique

Le code suivant montre comment fusionner les valeurs dans les trois colonnes en analysant les colonnes dans l’ordre suivant : passes décisives, rebonds, points.

#coalesce values in specific column order
df['coalesce'] = df[['assists', 'rebounds', 'points']].bfill(axis=1).iloc[:, 0]

#view updated DataFrame
print(df)

   points  assists  rebounds  coalesce
0     NaN      NaN       3.0       3.0
1     NaN      7.0       4.0       7.0
2    19.0      7.0       NaN       7.0
3     NaN      9.0       NaN       9.0
4    14.0      NaN       6.0       6.0

Voici la logique qui a été utilisée pour décider quelle valeur placer dans la colonne de fusion :

  • Si la valeur dans la colonne d’assistance n’est pas nulle, utilisez cette valeur.
  • Sinon, si la valeur dans la colonne des rebonds n’est pas nulle, utilisez cette valeur.
  • Sinon, si la valeur dans la colonne des points n’est pas nulle, utilisez cette valeur.

Remarque : Vous pouvez trouver la documentation complète de la fonction bfill() ici .

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans les pandas :

Comment combiner deux colonnes dans Pandas
Comment additionner des colonnes spécifiques dans Pandas
Comment trier par plusieurs colonnes dans Pandas

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *