5

我需要找到 coulmntwo值介于1.5和之间的所有行3.5。我期望的结果是索引为 1 和 2 的行。我尝试了以下代码,但出现错误。

>>> 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()
>>> 
4

2 回答 2

8

不幸的是,您不能与 numpy(以及 pandas)进行链式比较。改为:

df[(1.5 <= df.two) & (df.two <= 3.5)]
于 2013-08-06T20:44:00.257 回答
7

有点没有答案,但我想我还是会分享

在 pandas==0.13(下一个主要版本)中,您将能够执行以下操作

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

在后台,这使用了该pd.eval函数,该函数将链式比较重写为您通常编写它们的方式,然后将结果字符串传递给numexpr. 它还将 中的列(以及索引和列索引)“附加”DataFrame到特定于查询的命名空间(这可由用户控制,但默认为上述元素)。您还可以像在标准 Python 中使用,和位运算符一样使用and,ornot关键字。&|~

于 2013-08-06T21:57:49.767 回答