Comment utiliser cbind en Python (équivalent à R)
La fonction cbind dans R, abréviation de column-bind , peut être utilisée pour combiner des trames de données entre elles par leurs colonnes.
Nous pouvons utiliser la fonction concat() de pandas pour exécuter la fonction équivalente en Python :
df3 = pd.concat([df1, df2], axis=1)
Les exemples suivants montrent comment utiliser cette fonction dans la pratique.
Exemple 1 : utiliser cbind en Python avec des valeurs d’index égales
Supposons que nous ayons les deux DataFrames pandas suivants :
import pandas as pd #define DataFrames df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E'], 'points': [99, 91, 104, 88, 108]}) print(df1) team points 0 A 99 1 B 91 2 C 104 3 D 88 4 E 108 df2 = pd.DataFrame({'assists': ['A', 'B', 'C', 'D', 'E'], 'rebounds': [22, 19, 25, 33, 29]}) print(df2) assists rebounds 0 A 22 1 B 19 2 C 25 3 D 33 4 E 29
Nous pouvons utiliser la fonction concat() pour lier rapidement ces deux DataFrames ensemble par leurs colonnes :
#column-bind two DataFrames into new DataFrame
df3 = pd.concat([df1, df2], axis=1)
#view resulting DataFrame
df3
team points assists rebounds
0 A 99 A 22
1 B 91 B 19
2 C 104 C 25
3 D 88 D 33
4 E 108 E 29
Exemple 2 : utiliser cbind en Python avec des valeurs d’index inégales
Supposons que nous ayons les deux DataFrames pandas suivants :
import pandas as pd #define DataFrames df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E'], 'points': [99, 91, 104, 88, 108]}) print(df1) team points 0 A 99 1 B 91 2 C 104 3 D 88 4 E 108 df2 = pd.DataFrame({'assists': ['A', 'B', 'C', 'D', 'E'], 'rebounds': [22, 19, 25, 33, 29]}) df2.index = [6, 7, 8, 9, 10] print(df2) assists rebounds 6 A 22 7 B 19 8 C 25 9 D 33 10 E 29
Notez que les deux DataFrames n’ont pas les mêmes valeurs d’index.
Si nous essayons d’utiliser la fonction concat() pour les lier ensemble, nous obtiendrons le résultat suivant :
#attempt to column-bind two DataFrames
df3 = pd.concat([df1, df2], axis=1)
#view resulting DataFrame
df3
team points assists rebounds
0 A 99.0 NaN NaN
1 B 91.0 NaN NaN
2 C 104.0 NaN NaN
3 D 88.0 NaN NaN
4 E 108.0 NaN NaN
6 NaN NaN A 22.0
7 NaN NaN B 19.0
8 NaN NaN C 25.0
9 NaN NaN D 33.0
10 NaN NaN E 29.0
Ce n’est pas le résultat que nous souhaitions.
Pour résoudre ce problème, nous devons d’abord réinitialiser l’index de chaque DataFrame avant de les concaténer ensemble :
import pandas as pd #define DataFrames df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E'], 'points': [99, 91, 104, 88, 108]}) df2 = pd.DataFrame({'assists': ['A', 'B', 'C', 'D', 'E'], 'rebounds': [22, 19, 25, 33, 29]}) df2.index = [6, 7, 8, 9, 10] #reset index of each DataFrame df1.reset_index(drop=True, inplace=True) df2.reset_index(drop=True, inplace=True) #column-bind two DataFrames df3 = pd.concat([df1, df2], axis=1) #view resulting DataFrame df3 team points assists rebounds 0 A 99 A 22 1 B 91 B 19 2 C 104 C 25 3 D 88 D 33 4 E 108 E 29
Notez que ce DataFrame correspond à celui que nous avons obtenu dans l’exemple précédent.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes en Python :
Comment fusionner deux DataFrames Pandas sur l’index
Comment fusionner des DataFrames Pandas sur plusieurs colonnes
Comment effectuer une RECHERCHEV dans Pandas