在pandas数据框中搜索范围内的值?

2024-10-06 12:24:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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的值,而不必创建一个冗长而困难的条件,例如:

^{pr2}$

基本上,我想创建一个“缓冲窗口”,允许返回与窗口匹配的所有值。我有不确定因素的一揽子计划,但还没有像现在这样运作。在

最理想的情况是,我希望能够返回在给定误差范围内与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)]

这将返回给定列的命中率。使用第一个答案中的逻辑,我认为这将非常适合我所需要的。这种方法有什么我看不到的问题吗?在

干杯,谢谢你的帮助!在


Tags: 数据sample方法test编辑dataframepandas列表
2条回答

使用^{}

df['C'].between(112.6 + .4, 112.6 - .4)

IIUC您可以使用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

相关问题 更多 >