2012-10-05 36 views
23

tôi có thể sử dụng .map(func) trên bất kỳ cột trong một df, như:Pandas DataFrame: áp dụng chức năng để tất cả các cột

df=DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7]}) 

df['a']=df['a'].map(lambda x: x > 1) 

Tôi cũng có thể:

df['a'],df['b']=df['a'].map(lambda x: x > 1),df['b'].map(lambda x: x > 1) 

Có cách nào pythonic hơn để áp dụng một chức năng cho tất cả các cột hoặc toàn bộ khung (không có vòng lặp)?

+0

đơn giản hóa 'lambda' của bạn cho 'lambda x: x> 1' – Blender

+0

@ Máy xay sinh tố - cảm ơn, thay đổi nội dung ... – root

+0

Chỉ cần chỉ ra rằng. Bạn không thực sự cần chỉnh sửa câu hỏi gốc. – Blender

Trả lời

35

Nếu tôi hiểu bạn đúng, bạn đang tìm phương pháp applymap.

>>> print df 
    A B C 
0 -1 0 0 
1 -4 3 -1 
2 -1 0 2 
3 0 3 2 
4 1 -1 0 
>>> print df.applymap(lambda x: x>1) 
     A  B  C 
0 False False False 
1 False True False 
2 False False True 
3 False True True 
4 False False False 
+0

@ BrenBarn - vâng, đây chính xác là những gì tôi đang tìm kiếm. đã không nhận thấy nó từ các tài liệu. cảm ơn. – root

1

Từ 0.20.0 trở đi, bạn có thể sử dụng transform

In [578]: df.transform(lambda x: x > 1) 
Out[578]: 
     A  B  C 
0 False False False 
1 False True False 
2 False False True 
3 False True True 
4 False False False 

In [579]: df 
Out[579]: 
    A B C 
0 -1 0 0 
1 -4 3 -1 
2 -1 0 2 
3 0 3 2 
4 1 -1 0 

Và, đối với trường hợp đơn giản này, tại sao không chỉ cần sử dụng df > 1?

In [582]: df > 1 
Out[582]: 
     A  B  C 
0 False False False 
1 False True False 
2 False False True 
3 False True True 
4 False False False 
Các vấn đề liên quan