J'essaye de créer une nouvelle colonne qui provient du calcul de deux colonnes. Habituellement, quand j'ai besoin de le faire, mais avec une seule colonne, j'utilise .apply()
mais maintenant avec deux paramètres, je ne sais pas comment le faire.
Avec un je fais le code suivant:
from pandas import read_csv, DataFrame df = read_csv('results.csv') def myFunc(x,y): x = x + y return x df['new'] = df[['colA','colB']].apply(myFunc) df.head()
Avec deux, je pensais que c'était comme suit, mais pas.
from pandas import read_csv, DataFrame df = read_csv('results.csv') def myFunc(x): x = x + 5 return x df['new'] = df['colA'].apply(myFunc) df.head()
Je vois que certaines personnes utilisent lambda
mais je ne comprends pas et en plus je pense que cela doit être plus facile.
Merci beaucoup!
3 Réponses :
Avertissement: évitez d' apply
si possible. Dans cet esprit, vous recherchez axis=1
, mais vous devez réécrire la fonction comme:
df['new'] = [myFunc(x,y) for x,y in zip(df['colA'], df['colB'])]
ce qui équivaut essentiellement à:
df['new'] = df.apply(lambda x: myFunc(x['colA'], x['colB']), axis=1)
Vous pouvez utiliser axis=1
et dans les colonnes d'accès aux fonctions comme ci-dessous
df['new'] = df.apply(myFunc, axis=1)
et vous l'appliquez comme
def myFunc(x): x['colA'] x['colB']
Obtenez des connaissances sur l'utilisation de lambda à partir d'ici
La fonction lambda est une expression https://realpython.com/python-lambda/
La syntaxe spéciale * args dans les définitions de fonction en python est utilisée pour passer un nombre variable d'arguments à une fonction
https://www.geeksforgeeks.org/args-kwargs-python/
from pandas import read_csv, DataFrame df = read_csv('results.csv') def myFunc(x,y): return x + y df['new'] = df[['colA','colB']].apply(lambda col: myFunc(*col) ,axis=1) df.head()
Est-ce que cela répond à votre question? Comment appliquer une fonction à deux colonnes du dataframe Pandas