La création d'une nouvelle colonne dans Panda en utilisant une fonction lambda sur deux colonnes
Je suis en mesure d'ajouter une nouvelle colonne dans Panda par la définition de fonction de l'utilisateur et ensuite à l'aide d'appliquer. Cependant, je tiens à le faire à l'aide de lambda; est-il un moyen de contourner?
Par Exemple, df
a deux colonnes a
et b
. Je veux créer une nouvelle colonne c
qui est égale à la longueur la plus longue entre a
et b
.
Quelque chose comme:
df['c'] = df.apply(lambda x, len(df['a']) if len(df['a']) > len(df['b']) or len(df['b']) )
Une approche:
df = pd.DataFrame({'a':['dfg','f','fff','fgrf','fghj'], 'b' : ['sd','dfg','edr','df','fghjky']})
df['c'] = df.apply(lambda x: max([len(x) for x in [df['a'], df['b']]]))
print df
a b c
0 dfg sd NaN
1 f dfg NaN
2 fff edr NaN
3 fgrf df NaN
4 fghj fghjky NaN
Cela fonctionne une fois que vous avez corrigé les erreurs de syntaxe.
Merci pour la réponse rapide, cependant il toujours pas de travail. Voici le code et le message d'erreur. Je vais apprécier si vous pouvez fournir de l'aide. df = pd.DataFrame({'a':['dfg','f','fff','fgrf','fghj'], 'b' : ['sd','dfg','ede','df','fghjky']}) df['c'] = df.appliquer(lambda x: len(x['a']) if len(x['a']) > len(x['b']) d'autre len(x['b'])) KeyError: ('a', u'occurred à l'index')
Merci de ne pas mettre de code dans les commentaires, modifier la question de la place.
Désolé c'est ma première fois ici. J'essaie de modifier ma question, mais encore ce n'est pas venue dans une belle formaté façon
Dans le mode edit, il y a un bouton qui ouvre le formatage de l'aide. Tout d'abord, vous pouvez sélectionner le code et appuyez sur Ctrl-K, qui va mettre en retrait par 4 espaces.
lambda x
besoin d'un colon, et votre expression manque else
(peut-être qu'il devrait aller au lieu de or
).Merci pour la réponse rapide, cependant il toujours pas de travail. Voici le code et le message d'erreur. Je vais apprécier si vous pouvez fournir de l'aide. df = pd.DataFrame({'a':['dfg','f','fff','fgrf','fghj'], 'b' : ['sd','dfg','ede','df','fghjky']}) df['c'] = df.appliquer(lambda x: len(x['a']) if len(x['a']) > len(x['b']) d'autre len(x['b'])) KeyError: ('a', u'occurred à l'index')
Merci de ne pas mettre de code dans les commentaires, modifier la question de la place.
Désolé c'est ma première fois ici. J'essaie de modifier ma question, mais encore ce n'est pas venue dans une belle formaté façon
Dans le mode edit, il y a un bouton qui ouvre le formatage de l'aide. Tout d'abord, vous pouvez sélectionner le code et appuyez sur Ctrl-K, qui va mettre en retrait par 4 espaces.
OriginalL'auteur piyush sharma | 2015-11-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la fonction carte et les sélectionner en fonction de
np.where
plus d'infosSolution suivante est avec la fonction appliquer avec le paramètre
axis=1
:Pourquoi voulez-vous utiliser lambda?
axis = 1 c'est ce qui me manquait, merci beaucoup
La raison de l'utilisation lambda est moins de frappe et pour moi le code est plus lisible
OriginalL'auteur jezrael