2016-08-22 72 views
0

我想做一个区间比较类似于this question中描述为10000 <= number <= 30000,但我试图在数据框中做到这一点。例如,下面是我的示例数据,我想获取纬度在我的预定义坐标的1之内的所有行。在熊猫数据帧中的区间比较

import pandas as pd 
import numpy as np 

df = pd.DataFrame([[5,7, 'wolf'], 
       [5,6,'cow'], 
       [8, 2, 'rabbit'], 
       [5, 3, 'rabbit'], 
       [3, 2, 'cow'], 
       [7, 5, 'rabbit']], 
       columns = ['lat', 'long', 'type']) 

coords = [4,7] 

viewShort = df[(coords[0] - 1) <= df['lat'] <= (coords[0] + 1)] 

不幸的是,当我这样写时,我得到了一个ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我意识到,我可以写这样的而不是

viewLong = df[((coords[0] - 1) <= df['lat']) & (df['lat'] <= (coords[0] + 1))] 

,但我必须写很多这样的事情,所以我试图让更多的紧凑。我在viewShort示例中做了什么错误?或者,这是不可能的熊猫,我必须写很长的路?

谢谢!

旁注:正确viewShort数据帧应该有四行:

[5,7,'wolf'], 
[5,6,'cow'], 
[5,3,'rabbit'], 
[3,2,'cow'] 

回答

2

链式比较不被支持。你需要做的:

df[df['lat'].between(coords[0] - 1, coords[0] + 1)] # inclusive=True by default 
Out: 
    lat long type 
0 5  7 wolf 
1 5  6  cow 
3 5  3 rabbit 
4 3  2  cow 
+0

太好了,谢谢。我认为.between()对于我的目的来说足够干净。 – seth127