web-dev-qa-db-ja.com

列の値がパンダの範囲内(2つの値の間)にあるかどうかを確認するにはどうすればよいですか?

DataFrameがあり、列の値(v)のいずれかが_x<=v<=y_を満たすかどうかを確認したいと思います。

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

私が得るエラーはValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().ですが、すでにany()を使用しています!

それで、ここの問題は何ですか? _==_では機能するが_x<=v<=y_では機能しないのはなぜですか?

9
alec_djinn

これを行うには between を使用します。これは、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

次に、上記でanyを呼び出します。

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

Out[132]:
True

あなたは2つの条件を持つことができます:

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

この行は、条件が満たされているdfのすべての行を選択します。

7
Ulf Aslak

他の列の値を確認したい場合は、

df.loc[ df.loc[:, 'columnX'].between(a, b), : ]
0
Cloud Cho