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