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
Si, par exemple, votre fonction a pris
"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
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 faireSi, 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
Vous devez vous connecter pour publier un commentaire.
Utilisation
mp.DataFrame.appliquer()
, comme ci-dessous:REMARQUE: Comme @ashishsingal demandé sur les colonnes, la
axis
argument devrait être fourni avec une valeur de 1, la valeur par défaut est 0 (comme dans le la documentation et copié ci-dessous).OriginalL'auteur tsherwen
Je suis en utilisant les suivantes:
Semble fonctionner bien, mais si quelqu'un a une meilleure solution, s'il vous plaît laissez-moi savoir.
OriginalL'auteur ashishsingal
Si c'est vraiment une fonction simple, comme celle basée sur l'arithmétique simple, les chances sont qu'il peut être vectorisé. Par exemple, une combinaison linéaire peut être faite directement à partir des colonnes:
où w1,w2,w3 sont scalaire poids.
OriginalL'auteur Elias Hasle