2015-03-12 5 views
12

Я хочу, чтобы удалить строки, когда несколько условий:Удаление строк на основе нескольких условий Python панд

Например, случайное DataFrame генерируется:

import pandas as pd 
import numpy as np 
df = pd.DataFrame(np.random.randn(10, 4), columns=['one', 'two', 'three', 'four']) 
print df 

один экземпляр таблицы отображается как ниже:

 one  two  three  four 
0 -0.225730 -1.376075 0.187749 0.763307 
1 0.031392 0.752496 -1.504769 -1.247581 
2 -0.442992 -0.323782 -0.710859 -0.502574 
3 -0.948055 -0.224910 -1.337001 3.328741 
4 1.879985 -0.968238 1.229118 -1.044477 
5 0.440025 -0.809856 -0.336522 0.787792 
6 1.499040 0.195022 0.387194 0.952725 
7 -0.923592 -1.394025 -0.623201 -0.738013 
8 -1.775043 -1.279997 0.194206 -1.176260 
9 -0.602815 1.183396 -2.712422 -0.377118 

Я хочу, чтобы удалить строки на основе условий, которые:

Строка со значением col 'one', 'two', или 'three' больше 0; и Значение col 'four' меньше 0 должно быть удалено.

Затем я попытался осуществить следующим образом:

df = df[df.one > 0 or df.two > 0 or df.three > 0 and df.four < 1] 

Однако, в результате чего сообщение об ошибке, как следующие:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Может кто-нибудь помочь мне о том, как удалять на основе нескольких условий?

ответ

22

For reasons that aren't 100% clear to me, pandas играет хорошо с поразрядным логическими операторами | и &, но не булевы те or и and.

Попробуйте вместо этого:

df = df[(df.one > 0) | (df.two > 0) | (df.three > 0) & (df.four < 1)] 
+5

Вы хотите 'DF = D [((df.one> 0) | (df.two> 0) | (df.three> 0)) и (DF. четыре <1)] ', почему это связано с тем, что сопоставление массивов неоднозначно, так как есть потенциально множественные совпадения, см. это: http://stackoverflow.com/questions/10062954/valueerror-the-truth-value-of-an-array -with-more-than-one-element-is-ambiguous – EdChum

+0

О, кричит, не видел 'и' в конце. Ред. – Brionius

+1

@Brionius: это в основном потому, что 'или' и 'и' не могут иметь свое поведение, настроенное классом. Они делают то, что делают, основываясь на результате bool (the_object), и все. – DSM

Смежные вопросы