2015-11-12 26 views
6

Jestem w stanie dodać nową kolumnę w Panda, definiując funkcję użytkownika, a następnie za pomocą przycisku Zastosuj. Jednak chcę to zrobić za pomocą lambda; czy jest jakiś sposób obejścia?Tworzenie nowej kolumny w Panda przy użyciu funkcji lambda na dwóch istniejących kolumnach

Na przykład df ma dwie kolumny: a i b. Chcę utworzyć nową kolumnę c, która jest równa najdłuższej długości między a i b.

Niektóre rzeczy jak:

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

Jedno podejście:

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

To zadziała raz naprawić błędy składniowe. 'lambda x' potrzebuje dwukropka po nim, a twojemu wyrażeniu brakuje' else' (może to powinno iść zamiast 'lub'). –

+0

Dzięki za szybką reakcję, ale nadal nie działa. Oto kod i komunikat o błędzie. Będę wdzięczny, jeśli możesz udzielić jakiejkolwiek pomocy. df = pd.DataFrame ({'a': ['dfg', 'f', 'fff', 'fgrf', 'fghj'], 'b': ['sd', 'dfg', 'edr' , 'df', 'fghjky']}) df ['c'] = df.apply (lambda x: len (x ['a']) jeśli len (x ['a'])> len (x [ 'b']) else len (x ['b'])) KeyError: ('a', u'occurred at index a ') –

+0

Proszę nie umieszczać kodu w komentarzach, [edytuj] pytanie. –

Odpowiedz

6

Można użyć funkcji map i wybierz według funkcji 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 

Następny rozwiązanie jest z funkcją apply z 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

Mapa może działać, ale głównie szukam sposobu użycia Lambdy z dwiema kolumnami i utworzenia nowej kolumny, jeśli to możliwe –

+1

Dlaczego chcesz używać lambda? – jezrael

+0

axis = 1 tego właśnie mi brakowało, dziękuję bardzo –