2014-06-13 75 views
5

Tôi đã tự hỏi làm thế nào tôi có thể loại bỏ tất cả các chỉ mục có chứa các giá trị âm trong cột của chúng. Tôi đang sử dụng Pandas DataFrames.Python Pandas: DataFrame bộ lọc giá trị âm

Documentation Pandas DataFrame

Format:

myid - valuecol1 - valuecol2 - valuecol3 -... valuecol30

Vì vậy, tôi DataFrame được gọi data

0.123.

tôi biết làm thế nào để làm điều này trong vòng 1 cột:

data2 = data.index[data['valuecol1'] > 0] 
data3 = data.ix[data3] 

Vì vậy, tôi chỉ nhận được id nơi valuecol1 > 0, làm thế nào tôi có thể làm một số loại and tuyên bố?

valuecol1 && valuecol2 && valuecol3 && ... && valuecol30 > 0?

Trả lời

3

Bạn có thể lặp qua các tên cột

for cols in data.columns.tolist()[1:]: 
    data = data.ix[data[cols] > 0] 
+0

Cảm ơn bạn rất nhiều. Điều này dường như hoạt động. – zer02

5

Bạn có thể sử dụng all để kiểm tra toàn bộ một hàng hoặc cột là True:

In [11]: df = pd.DataFrame(np.random.randn(10, 3)) 

In [12]: df 
Out[12]: 
      0   1   2 
0 -1.003735 0.792479 0.787538 
1 -2.056750 -1.508980 0.676378 
2 1.355528 0.307063 0.369505 
3 1.201093 0.994041 -1.169323 
4 -0.305359 0.044360 -0.085346 
5 -0.684149 -0.482129 -0.598155 
6 1.795011 1.231198 -0.465683 
7 -0.632216 -0.075575 0.812735 
8 -0.479523 -1.900072 -0.966430 
9 -1.441645 -1.189408 1.338681 

In [13]: (df > 0).all(1) 
Out[13]: 
0 False 
1 False 
2  True 
3 False 
4 False 
5 False 
6 False 
7 False 
8 False 
9 False 
dtype: bool 

In [14]: df[(df > 0).all(1)] 
Out[14]: 
      0   1   2 
2 1.355528 0.307063 0.369505 

Nếu bạn chỉ muốn xem một tập hợp con của cột, ví dụ [0, 1]:

In [15]: df[(df[[0, 1]] > 0).all(1)] 
Out[15]: 
      0   1   2 
2 1.355528 0.307063 0.369505 
3 1.201093 0.994041 -1.169323 
6 1.795011 1.231198 -0.465683 
0

Nếu bạn muốn kiểm tra các giá trị của một nhóm liền kề các cột, ví dụ từ thứ hai đến thứ mười:

df[(df.ix[:,2:10] > 0).all(1)] 

Bạn cũng có thể sử dụng một loạt

df[(df.ix[:,range(1,10,3)] > 0).all(1)] 

và danh sách chỉ mục riêng

mylist=[1,2,4,8] 
df[(df.ix[:, mylist] > 0).all(1)] 
2

Để sử dụng và báo cáo bên trong một khung dữ liệu, bạn chỉ cần sử dụng một ký tự & duy nhất và tách riêng từng điều kiện với dấu ngoặc đơn.

Ví dụ:

data = data[(data['col1']>0) & (data['valuecol2']>0) & (data['valuecol3']>0)] 
Các vấn đề liên quan