2015-11-12 26 views
6

Tôi có thể thêm cột mới trong Panda bằng cách xác định hàm người dùng và sau đó sử dụng áp dụng. Tuy nhiên, tôi muốn thực hiện việc này bằng cách sử dụng lambda; có cách nào không?Tạo cột mới trong Panda bằng cách sử dụng hàm lambda trên hai cột hiện có

Ví dụ: df có hai cột ab. Tôi muốn tạo cột mới c bằng chiều dài dài nhất giữa ab.

Một số điều như:

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

Một cách tiếp cận:

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

này sẽ làm việc một khi bạn sửa chữa các lỗi cú pháp. 'lambda x' cần một dấu hai chấm sau nó, và biểu thức của bạn thiếu' else' (có thể nó sẽ thay vì 'hoặc'). –

+0

Cảm ơn bạn đã phản hồi nhanh, tuy nhiên nó vẫn không hoạt động. Đây là mã và thông báo lỗi. Tôi sẽ đánh giá cao nếu bạn có thể cung cấp bất kỳ trợ giúp nào. df = pd.DataFrame ({'a': ['dfg', 'f', 'fff', 'fgrf', 'fghj'], 'b': ['sd', 'dfg', 'edr' , 'df', 'fghjky']}) df ['c'] = df.apply (lambda x: len (x ['a']) nếu len (x ['a'])> len (x [ 'b']) khác len (x ['b'])) KeyError: ('a', u'occurred at index a ') –

+0

Xin vui lòng không đặt mã trong các ý kiến, [sửa] câu hỏi để thay thế. –

Trả lời

6

Bạn có thể sử dụng chức năng map và chọn bởi chức năng 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 

giải pháp tiếp theo là với chức năng apply với sự nổi tiếng 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

Bản đồ có thể hoạt động nhưng chủ yếu là tôi đang tìm cách sử dụng Lambda với hai cột và tạo cột mới nếu có thể –

+1

Tại sao bạn muốn sử dụng lambda? – jezrael

+0

axis = 1 đó là những gì tôi đã mất tích, cảm ơn rất nhiều –

Các vấn đề liên quan