2015-11-12 43 views
6

Sono in grado di aggiungere una nuova colonna in Panda definendo la funzione utente e quindi utilizzando apply. Tuttavia, voglio farlo usando lambda; c'è un modo per aggirare?Creazione di una nuova colonna in Panda utilizzando la funzione lambda su due colonne esistenti

Ad esempio, df ha due colonne a e b. Voglio creare una nuova colonna c che è uguale alla lunghezza più lunga tra a e b.

qualche cosa come:

df['c'] = df.apply(lambda x, len(df['a']) if len(df['a']) > len(df['b']) or len(df['b'])) 

Un approccio:

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 
+0

Ciò funzionerà una volta a correggere gli errori di sintassi. 'lambda x' ha bisogno di due punti dopo di esso, e la tua espressione è priva di' else' (forse dovrebbe andare al posto di 'or'). –

+0

Grazie per la risposta rapida, tuttavia non funziona ancora. Ecco il codice e il messaggio di errore. Apprezzerò se puoi fornire qualsiasi aiuto. df = pd.DataFrame ({'a': ['dfg', 'f', 'fff', 'fgrf', 'fghj'], 'b': ['sd', 'dfg', 'edr' , 'df', 'fghjky']}) df ['c'] = df.apply (lambda x: len (x ['a']) se len (x ['a'])> len (x [ 'b']) else len (x ['b'])) KeyError: ('a', u'occurrato all'indice a ') –

+0

Si prega di non inserire il codice nei commenti, [modifica] la domanda invece. –

risposta

6

È possibile utilizzare la funzione map e selezionare in base alla funzione np.wheremore info

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 

soluzione successiva è con la funzione apply con Parame ter axis=1:

axis = 1 or ‘columns’: apply function to each row

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

Map potrebbe funzionare ma principalmente sto cercando un modo per utilizzare Lambda con due colonne e creare una nuova colonna, se possibile –

+1

Perché vuoi usare lambda? – jezrael

+0

axis = 1 questo è quello che mi mancava, grazie mille –