熊猫数据帧中的区间比较

时间:2016-08-22 15:14:44

标签: python pandas

我正在尝试进行间距比较,类似于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']

1 个答案:

答案 0 :(得分: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