Comment mapper une fonction à l'aide de plusieurs colonnes dans les pandas?

J'ai vérifié la carte, d'appliquer, d'mapapply, et de les combiner, mais ne semble pas possible de trouver un moyen simple de faire ce qui suit:

J'ai un dataframe avec 10 colonnes. J'ai besoin de passer trois d'entre eux dans une fonction qui prend scalaires et retourne un scalaire ...

some_func(int a, int b, int c) returns int d

Je veux appliquer ce et de créer une nouvelle colonne dans le dataframe avec le résultat.

df['d'] = some_func(a = df['a'], b = df['b'], c = df['c'])

Toutes les solutions que j'ai trouvé semblent suggérer à réécrire some_func de travailler avec la Série au lieu de scalaires, mais ce n'est pas possible car il fait partie d'un autre ensemble. Comment puis-je élégamment faire la-dessus?

Cela dépend de ce que les fonctions sont en train de faire, mais en général, vous faites quelque chose comme def func(row): return row['a'] * row['b'] * row['c'] df.apply( lambda row: func(row), axis = 1) idéalement, vous voulez écrire votre fonction de manière à ce qu'il puisse fonctionner sur l'ensemble de la série donc c'est vectorisée, pouvez-vous montrer ce que vous êtes vraiment essayer de faire
Si, par exemple, votre fonction a pris Series comme params ensuite, vous pouvez réécrire à def some_func(a,b,c): return a*b*c df['d'] = some_func(df['a'], df['b'], df['c'])
"some_func" est une fonction complexe qui fait un appel SQL pour remplir les données, j'ai donc simplifié ici. Je suis l'aide de df.appliquer, comme l'a suggéré.
Bonjour @ashishsingal, si vous êtes d'accord que ma réponse est correcte, s'il vous plaît pourriez-vous sélectionner comme la réponse pour cette question? Cheers, Tomas

OriginalL'auteur ashishsingal | 2015-02-11