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