如何检查Pandas中列的任何值是否在一个范围内(在两个值之间)?

ale*_*inn 7 python any pandas

我有一个DataFrame,我想检查一列的任何值(v)是否满足x<=v<=y.

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

我得到的错误是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

EdC*_*ica 18

使用between要做到这一点,它也支持是否包括范围内的值或不通过inclusiveARG:

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
Run Code Online (Sandbox Code Playgroud)

然后你打电话any给上面:

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

Out[132]:
True
Run Code Online (Sandbox Code Playgroud)

  • 我个人会做 `in_ Between = df['columnX']. Between(x, y,inclusive=True).any()` ,但是是的,那会起作用 (2认同)

Ulf*_*lak 7

你可以有两个条件:

df[(x <= df['columnX']) & (df['columnX'] <= y)]
Run Code Online (Sandbox Code Playgroud)

该行将选择满足条件的df中的所有行.


sha*_*r_m 6

您可以使用自定义函数在数据帧上运行:

df1 = pd.DataFrame({'a':[1,1,2,2], 'b':[1,1,2,2], 'c':[2,-1,4,5]})
myfun = lambda row: row['b']<=row['a']<=row['c']
df1['Result'] = df1.apply(myfun, axis=1)
display(df1)
Run Code Online (Sandbox Code Playgroud)