2016-08-22 15 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データフレームは、4つの行を持っている必要があります。

[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

関連する問題