0
votes

Utilisez deux colonnes comme entrées - Pandas

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!


1 commentaires

Est-ce que cela répond à votre question? Comment appliquer une fonction à deux colonnes du dataframe Pandas


3 Réponses :


2
votes

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)


0 commentaires

1
votes

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']


0 commentaires

1
votes

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()


0 commentaires