我试图在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)]
然后返回给定列的命中。使用第一个答案中提出的逻辑,我认为这将非常适合我需要它。有什么挂钩我用这种方法看不到吗?
欢呼并感谢您的帮助!
答案 0 :(得分:2)
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
答案 1 :(得分:0)
df['C'].between(112.6 + .4, 112.6 - .4)