2015-11-12 25 views
6

Kullanıcı işlevini tanımlayarak ve ardından uygulamayı kullanarak Panda'ya yeni bir sütun ekleyebiliyorum. Bununla birlikte, bunu lambda kullanarak yapmak istiyorum; etrafında bir yolu var mı?İki varolan sütunda lambda işlevini kullanarak Panda'da yeni bir sütun oluşturma

Örneğin, df iki sütun a ve b bulunur. Ben a ve b arasındaki en uzun uzunluğa eşit olan yeni bir sütun c oluşturmak istiyorum.

gibi bazı şey:

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

Bir yaklaşım:

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

Bu çalışacaktır. lambda x' sonrası bir kolon ihtiyacı var, ve ifadeniz 'else' (belki de' '' yerine) olmalıdır. –

+0

Hızlı yanıt için teşekkürler, ancak hala çalışmıyor. İşte kod ve hata mesajı. Herhangi bir yardım sağlayabiliyorsanız minnettar olacağım. df = pd.DataFrame ({'a': ['dfg', 'f', 'fff', 'fgrf', 'fghj'], 'b': ['sd', 'dfg', 'edr' , 'df', 'fghjky']}) df ['c'] = df.apply (lambda x: len (x ['a']), eğer len (x ['a'])> len (x [ 'b']) else (x ['b'])) KeyError: ('a', indeks a 'a' a '' yazınız) –

+0

Lütfen yorumlara kod yazmayın, bunun yerine [değiştir]. –

cevap

6

Sen işlevini map kullanabilir ve işlevi tarafından seçebilir np.wheremore info

Sonraki çözüm ile fonksiyonu apply ile

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 
parametrelerle ter axis=1: Eğer sözdizimi hataları düzeltmek kez

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

Harita işe yarayabilir ama esas olarak iki sütunlu Lambda'yı kullanmanın bir yolunu arıyorum ve mümkünse yeni bir sütun yaratıyorum –

+1

Neden lambda kullanmak istiyorsunuz? – jezrael

+0

axis = 1 eksik olduğum şey, çok teşekkürler –

İlgili konular