web-dev-qa-db-fra.com

Créer une nouvelle colonne dans Panda en utilisant la fonction lambda sur deux colonnes existantes

Je peux ajouter une nouvelle colonne dans Panda en définissant la fonction utilisateur puis en utilisant apply. Cependant, je veux le faire en utilisant lambda; existe-t-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 plus longue longueur 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
16
piyush sharma

Vous pouvez utiliser la fonction map et sélectionner par la fonction np.whereplus d'informations

print df
#     a     b
#0  aaa  rrrr
#1   bb     k
#2  ccc     e
#condition if condition is True then len column a else column b
df['c'] = np.where(df['a'].map(len) > df['b'].map(len), df['a'].map(len), df['b'].map(len))
print df
#     a     b  c
#0  aaa  rrrr  4
#1   bb     k  2
#2  ccc     e  3

La solution suivante est avec la fonction appliquer avec le paramètre axis=1:

axe = 1 ou "colonnes": appliquer une fonction à chaque ligne

df['c'] = df.apply(lambda x: max(len(x['a']), len(x['b'])), axis=1)
15
jezrael