Comment appliquer une fonction sur plusieurs colonnes d'une DataFrame pandas et en créer plusieurs nouvelles ?

Published: 28 juin 2023

Tags: Python; Pandas; Dataframe;

DMCA.com Protection Status

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