Lorsque vous travaillez avec un DataFrame pandas, il peut être utile d'appliquer une fonction à plusieurs colonnes pour en créer des nouvelles. Pour cela, vous pouvez utiliser la méthode .apply() qui permet une transformation rapide et efficace des données. Exemple:
Créez une dataframe en utilisant Pandas.
Pour commencer, créons un tableau de données en utilisant des informations fictives :
import pandas as pd
import numpy as np
import random
np.random.seed(42)
d = {'longitude':[random.uniform(0,1) * (360) - 180 for i in range(20)],
'latitude':[random.uniform(0,1) * (180) - 90 for i in range(20)]}
df = pd.DataFrame(data=d)
le code affiché ci-dessus générera par exemple :
longitude latitude
0 167.067264 -39.476855
1 28.979819 1.683163
2 -124.513305 -60.536511
3 114.754113 55.249186
4 12.346310 45.642464
5 30.275235 -37.494582
6 135.649712 53.335008
7 175.366444 -30.276944
8 171.082997 -63.158958
9 63.046690 63.781048
10 -113.276502 -65.871205
11 -138.539111 -36.767633
12 -169.591685 -56.994853
13 3.381588 -15.315441
14 138.534118 58.519542
15 -161.543564 56.212077
16 -142.353835 46.069997
17 72.519566 30.986494
18 83.485540 -38.041282
19 68.728968 -18.316078
Créer une fonction avec plusieurs sorties
Pour appliquer une fonction à plusieurs colonnes, vous devez créer une fonction personnalisée qui peut prendre plusieurs entrées et renvoyer plusieurs sorties.
def spatial_aggregation(x):
resolution = 1.0
latitude_idx = int( (x['latitude']+90.0) / resolution )
longitude_idx = int( (x['longitude']+180) / resolution )
return longitude_idx, latitude_idx
Appliquer la fonction à la DataFrame
Pandas permet d'appliquer facilement une fonction à plusieurs colonnes d'une DataFrame pour créer de nouvelles colonnes.
Pour ajouter de nouvelles colonnes, vous pouvez utiliser la méthode DataFrame.apply(). Il suffit de fournir la fonction souhaitée en premier argument. La méthode renvoie un objet pandas avec les nouvelles variables. Vous pouvez également spécifier l'axe sur lequel la fonction doit être appliquée (colonne ou ligne) en utilisant l'argument d'axe facultatif. Par défaut, l'axe est 0. Exemple :
df[['latitude_agg', 'longitude_agg']] = df.apply(spatial_aggregation, axis=1, result_type='expand')
le code affiché ci-dessus générera alors par exemple :
longitude latitude latitude_agg longitude_agg
0 167.067264 -39.476855 347 50
1 28.979819 1.683163 208 91
2 -124.513305 -60.536511 55 29
3 114.754113 55.249186 294 145
4 12.346310 45.642464 192 135
5 30.275235 -37.494582 210 52
6 135.649712 53.335008 315 143
7 175.366444 -30.276944 355 59
8 171.082997 -63.158958 351 26
9 63.046690 63.781048 243 153
10 -113.276502 -65.871205 66 24
11 -138.539111 -36.767633 41 53
12 -169.591685 -56.994853 10 33
13 3.381588 -15.315441 183 74
14 138.534118 58.519542 318 148
15 -161.543564 56.212077 18 146
16 -142.353835 46.069997 37 136
17 72.519566 30.986494 252 120
18 83.485540 -38.041282 263 51
19 68.728968 -18.316078 248 71
Pour utiliser correctement la méthode apply(), il est important de veiller à ce que le nombre de lignes de la sortie souhaitée corresponde à celui de la dataframe d'origine. Dans le cas contraire, une erreur ValueError sera déclenchée.
Références
Liens | Sites |
---|---|
How to apply a function to an individual or multiple columns of a pandas DataFrame ? | moonbooks.org |
apply() | pandas.pydata.org |