如何检查列的任何值是否在 Pandas 的范围内(在两个值之间)?
How to check if any value of a column is in a range (in between two values) in Pandas?
我有一个 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
?
使用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
你可以有两个条件:
df[(x <= df['columnX']) & (df['columnX'] <= y)]
这一行将 select df 中满足条件的所有行。
如果您想查看其他列值,可以尝试
df.loc[ df.loc[:, 'columnX'].between(a, b), : ]
您可以在数据框上为 运行 使用自定义函数:
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)
我有一个 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
?
使用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
你可以有两个条件:
df[(x <= df['columnX']) & (df['columnX'] <= y)]
这一行将 select df 中满足条件的所有行。
如果您想查看其他列值,可以尝试
df.loc[ df.loc[:, 'columnX'].between(a, b), : ]
您可以在数据框上为 运行 使用自定义函数:
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)