在pandas数据框中查找范围内的值?

3

我将尝试在给定不确定性范围内搜索pandas数据框中的匹配值。例如,如果我有一个数据框:

    A     B        C
0   12  12.6    111.20
1   14  23.4    112.20
2   16  45.6    112.30
3   18  56.6    112.40
4   27  34.5    121.60
5   29  65.2    223.23
6   34  45.5    654.50
7   44  65.6    343.50

如何搜索符合112.6 +/-0.4的值,而不必创建一个长而困难的标准?

TargetVal_Max= 112.6+0.4
TargetVal_Min= 112.6-0.4

基本上,我想创建一个“缓冲窗口”,允许返回与窗口匹配的所有值。我有不确定性包,但尚未使其像这样工作。
最理想的情况是能够在给定的误差范围内返回与C和B中的值匹配的所有索引值。
编辑
正如@MaxU所指出的那样,如果您知道确切数字,np.isclose f(x)非常有效。但是否可能匹配值列表,以便如果我有第二个数据框架并希望查看来自一个数据框架的C值是否与C(第二个数据框架)的值在容限范围内匹配?我已经尝试将它们放入列表并以这种方式执行,但尝试一次以上单个值时会遇到问题。
TEST= Dataframe_2["C"]
HopesNdreams = sample[sample["C"].apply(np.isclose,b=TEST, atol=1.0)]

编辑2

我尝试了几种不同的解决方法后发现,我只需做以下操作:

TEST1= Dataframe_2["C"].tolist
for i in TEST1:
    HopesNdreams= sample[sample["C"].apply(np.isclose,b=i, atol=1.0)]

这将返回给定列的命中次数。根据第一个答案中提出的逻辑,我认为这对我需要的功能非常有效。这种方法是否存在我没有看到的任何问题?

感谢您的帮助!

2个回答

3

如果我理解正确,您可以使用 np.isclose() 函数:

In [180]: df[['B','C']].apply(np.isclose, b=112.6, atol=0.4)
Out[180]:
       B      C
0  False  False
1  False   True
2  False   True
3  False   True
4  False  False
5  False  False
6  False  False
7  False  False

In [181]: df[['B','C']].apply(np.isclose, b=112.6, atol=0.4).any(1)
Out[181]:
0    False
1     True
2     True
3     True
4    False
5    False
6    False
7    False
dtype: bool

In [182]: df[df[['B','C']].apply(np.isclose, b=112.6, atol=0.4).any(1)]
Out[182]:
    A     B      C
1  14  23.4  112.2
2  16  45.6  112.3
3  18  56.6  112.4

这太好了,谢谢@MaxU!不过,有没有办法可以匹配一系列值?例如,b是另一个数据框中的一系列值,而不是单个数字;找到一个接近该系列中某个值的数字?我尝试将其作为从系列生成的列表和df列名来处理,但出现了“unhashable type: 'numpy.ndarray'”的错误。 - Jmegan042

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接