2015-11-12 6 views
6

Ich kann eine neue Spalte in Panda hinzufügen, indem ich die Benutzerfunktion definiere und dann Apply anwende. Ich möchte dies jedoch unter Verwendung von Lambda; Gibt es einen Weg herum?Erstellen einer neuen Spalte in Panda mithilfe der Lambda-Funktion für zwei vorhandene Spalten

Zum Beispiel hat df zwei Spalten a und b. Ich möchte eine neue Spalte c erstellen, die der längsten Länge zwischen a und b entspricht.

Manche Dinge wie:

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

Ein Ansatz:

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

Dies funktioniert, wenn Sie die Syntaxfehler zu beheben. 'Lambda x' benötigt einen Doppelpunkt danach, und Ihrem Ausdruck fehlt 'else' (vielleicht sollte es anstelle von' oder' gehen). –

+0

Danke für die schnelle Antwort, aber es funktioniert immer noch nicht. Hier ist der Code und die Fehlermeldung. Ich werde schätzen, wenn Sie irgendeine Hilfe zur Verfügung stellen können. df = pd.DataFrame ({'a': ['dfg', 'f', 'fff', 'fgrf', 'fghj'], 'b': ['sd', 'dfg', 'edr' , 'df', 'fghjky'}}) df ['c'] = df.apply (lambda x: len (x ['a']) wenn len (x ['a'])> len (x [] 'b']) else len (x ['b'])) KeyError: ('a', u'curred bei Index a ') –

+0

Bitte Code nicht in Kommentare eingeben, stattdessen die Frage bearbeiten. –

Antwort

6

Sie Funktion map und wählen Sie durch Funktion 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 

Nächste Lösung ist mit Funktion können apply mit Parameter axis=1 ter:

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

Karte funktioniert vielleicht, aber hauptsächlich suche ich nach einer Möglichkeit, Lambda mit zwei Spalten zu verwenden und wenn möglich eine neue Spalte zu erstellen –

+1

Warum soll Lambda verwendet werden? – jezrael

+0

Achse = 1 das ist was ich vermisst habe, vielen Dank –