2015-01-09 29 views
6

Tôi có khung dữ liệu sau:Làm thế nào để thay thế tất cả giá trị trong tất cả các cột trong một dataframe Pandas với điều kiện

In [11]: import pandas as pd 

In [12]: mydict = {'foo':[0, 0.3], 'bar':[1,0.55], 'qux': [0.3,4.1]} 

In [13]: df = pd.DataFrame.from_dict(mydict, orient='index') 

In [14]: df 
Out[14]: 
     0  1 
qux 0.3 4.10 
foo 0.0 0.30 
bar 1.0 0.55 

Những gì tôi muốn làm là thay thế tất cả các giá trị có nghĩa là ít hơn 1 với 0. Yielding:

 0  1 
qux 0  4.10 
foo 0  0 
bar 1.0 0 

Làm cách nào để đạt được điều đó?

Trả lời

6

Sử dụng boolean chỉ mục và vượt qua các điều kiện:

In [155]: 
df[df<1] = 0 
df 
Out[155]: 
    0 1 
bar 1 0.0 
foo 0 0.0 
qux 0 4.1 

Chỉ cần để hiển thị những gì đang xảy ra ở đây biểu diễn df < 1 sẽ trả về một chỉ số boolean:

In [156]: 
df < 1 
Out[156]: 
     0  1 
bar False True 
foo True True 
qux True False 

này thì chúng ta vượt qua để df như một mặt nạ và sau đó có thể chỉ định các giá trị mới dưới dạng df[df<1] xem docs để biết thêm ví dụ

+0

Làm cách nào bạn thực hiện việc này nhưng không t inplace? –

+0

@ O.rka Tôi không hiểu câu hỏi của bạn, nếu bạn không gán kết quả thì không biến đổi df – EdChum

+0

Rất nhiều hàm có inplace = False không thay đổi đối tượng gốc. Có cách nào tương tự với điều này không? –

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