2016-08-22 9 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

대단히 감사합니다. 나는 그 사이에() 내 목적을 위해 충분히 깨끗하다고 ​​생각합니다. – seth127

관련 문제