Comment appliquer une fonction sur plusieurs colonnes d'une DataFrame pandas ?

Published: 21 septembre 2023

Updated: 21 septembre 2023

Tags: Python; Pandas; Dataframe;

DMCA.com Protection Status

Lorsque vous travaillez avec une DataFrame pandas, il est souvent nécessaire d'appliquer une seule fonction à plusieurs colonnes afin de créer plusieurs nouvelles. Heureusement, ce processus peut être facilement réalisé en utilisant la méthode .apply(). Cela permet une transformation rapide et efficace des données ainsi que la possibilité d'effectuer des opérations intensives en calcul rapidement et efficacement. Exemples :

Données synthétiques

Pour commencer, générons une DataFrame en utilisant des données synthétiques :

    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éez une fonction avec plusieurs sorties

Pour appliquer une fonction sur plusieurs colonnes, vous devrez créer une fonction personnalisée capable d'accepter plusieurs entrées et de 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 une fonction à une DataFrame.

Pandas offre une manière efficace d'appliquer une fonction à plusieurs colonnes d'un DataFrame, créant ainsi plusieurs nouvelles colonnes.

Cela peut être fait en utilisant la méthode DataFrame.apply(), qui prend en premier argument la fonction désirée et renvoie un objet pandas avec les variables nouvellement créées. La méthode apply() a également un argument optionnel axis avec la valeur par défaut de 0, qui spécifie comment la fonction doit être appliquée (soit colonne par colonne, soit ligne par ligne), Exemple:

    df[['latitude_agg', 'longitude_agg']] = df.apply(spatial_aggregation, axis=1, result_type='expand')

le code affiché ci-dessus générera 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

Lors de l'utilisation de la méthode apply(), il est important de s'assurer que la sortie souhaitée a le même nombre de lignes que le dataframe. Si cela n'est pas fait, une ValueError sera levée.

Références