2016-10-20 4 views
3

Ich habe einen DataFrame und ich möchte überprüfen, ob einer der Werte (v) einer Spalte x<=v<=y erfüllt.Wie überprüft man, ob ein Wert einer Spalte in einem Bereich in Pandas ist?

equal = any(df['columnX'] == value) # No problems here 
in_between = any(x <= df['columnX'] <= y) # ValueError :/ 

Der Fehler ich erhalte, ist ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). Aber ich any() bin schon mit!

Also, was ist das Problem hier? Warum funktioniert es mit == aber nicht mit x<=v<=y?

Antwort

7

Verwenden between, dies zu tun, sondern unterstützt auch, ob die Bereichswerte enthalten sind oder nicht über inclusive arg:

In [130]: 
s = pd.Series(np.random.randn(5)) 
s 

Out[130]: 
0 -0.160365 
1 1.496937 
2 -1.781216 
3 0.088023 
4 1.325742 
dtype: float64 

In [131]: 
s.between(0,1) 

Out[131]: 
0 False 
1 False 
2 False 
3  True 
4 False 
dtype: bool 

Sie dann any auf dem oben rufen:

In [132]: 
s.between(0,1).any() 

Out[132]: 
True 
+0

Wäre das dann korrekt? 'in_between = any (df ['columnX']. zwischen (x, y, inclusive = True))' –

+0

Ich würde 'in_between = df ['columnX']. zwischen (x, y, inclusive = True) machen. any() 'persönlich aber ja, das würde funktionieren – EdChum

+0

Ja, es funktioniert, beide Wege gaben mir die gleichen Ergebnisse. Vielen Dank! –

3

Sie können nur habe zwei Bedingungen:

df[(x <= df['columnX']) & (df['columnX'] <= y)] 

Diese Zeile wählt alle Zeilen in df aus, in denen die Bedingung erfüllt ist.

Verwandte Themen