2013-08-06 2 views
3

Мне нужно найти все строки, в которых значения coulmn two находятся между 1.5 и 3.5. Результат, который я ожидаю, это строка с индексами 1 и 2. Я пробовал следующий код, но получаю сообщение об ошибке.pandas как выполнить сравнение по столбцу

>>> d = {'one' : [1., 2., 3., 4.], 
... 'two' : [4., 3., 2., 1.], 
... 'three':['a','b','c','d']} 
>>> d 
{'three': ['a', 'b', 'c', 'd'], 'two': [4.0, 3.0, 2.0, 1.0], 'one': [1.0, 2.0, 3.0, 4.0]} 
>>> DataFrame(d) 
    one three two 
0 1  a 4 
1 2  b 3 
2 3  c 2 
3 4  d 1 
>>> df = DataFrame(d) 
>>> df[1.5 <= df['two'] <= 3.5] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
>>> 

ответ

5

К сожалению, вы не можете делать прикованные сравнения с numpy (и, следовательно, пандами). Есть ли вместо:

df[(1.5 <= df.two) & (df.two <= 3.5)] 
+0

Спасибо. Работала по желанию. – learner

+0

. Каждая операция сравнения объекта серии создает новую булевскую серию и единственный способ выполнить операцию 'и' или 'или' между Серией использует' & 'и' | ' бинарных операторов. После этого вы можете сделать обычное булевское индексирование. –

5

Сортировать по не-ответ, но я думал, что я хотел бы поделиться в любом случае

В панд == 0,13 (следующий крупный релиз), вы будете иметь возможность сделать следующее

df['1.5 <= two <= 3.5'] 
# or use the query method 
df.query('1.5 <= two <= 3.5') 

Под капотом используется функция pd.eval, которая переписывает скованные сравнения, как вы обычно пишете их, а затем передает полученную строку в numexpr. Он также «прикрепляет» столбцы (и индекс и индекс столбца) в DataFrame к пространству имен, специфичному для запроса (это контролируется пользователем, но по умолчанию оно относится к вышеупомянутым элементам). Вы также сможете использовать ключевые слова ,и not так, чтобы вы использовали побитовые операторы &, | и ~ в стандартном Python.

+0

распространить слово! –

+0

Я должен сказать, что мое использование прилагаемой терминологии от Р. –

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