Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过数据帧中的差异查找行_Python_Numpy_Pandas - Fatal编程技术网

Python 通过数据帧中的差异查找行

Python 通过数据帧中的差异查找行,python,numpy,pandas,Python,Numpy,Pandas,我有一个数据帧,我想在其中标识时间值t相差固定量的所有行对,比如diff In [8]: df.t Out[8]: 0 143.082739 1 316.285739 2 344.315561 3 272.258814 4 137.052583 5 258.279331 6 114.069608 7 159.294883 8 150.112371 9 181.537183 ... 例如,如果diff=22.2423,则第4行和第7行之

我有一个数据帧,我想在其中标识时间值
t
相差固定量的所有行对,比如
diff

In [8]: df.t
Out[8]:
0    143.082739
1    316.285739
2    344.315561
3    272.258814
4    137.052583
5    258.279331
6    114.069608
7    159.294883
8    150.112371
9    181.537183
...
例如,如果
diff=22.2423
,则第4行和第7行之间存在匹配

查找所有此类匹配的明显方法是迭代每一行并对数据帧应用筛选器:

for t in df.t:
    matches = df[abs(df.t - (t + diff)) < EPS]
    # log matches
df.t中t的
:
匹配项=df[abs(df.t-(t+diff))
但由于我有一个值日志(10000+),这将是相当缓慢的

进一步,我想查看并检查是否存在差异的倍数
diff
。例如,在我的示例中,第4行和第9行的差异是
2*diff
。所以我的代码需要很长时间

有人对更有效的方法有什么建议吗

提前谢谢


编辑:再想一想,问题归结为找到一种有效的方法来查找两个列表/系列对象中包含的浮点数,使其在一定的公差范围内

如果我能做到这一点,那么我可以简单地比较
df.t
df.t-diff
df.t-2*diff
,等等。

如果你想检查许多倍数,最好在你的公差范围内取
df
相对于
diff
的模,并将结果比较为零

无论是否使用模,在一定公差范围内比较浮动的有效方法是。在1.8之前的版本中,将其称为
numpy.testing.allcose


到目前为止,我所描述的仍然涉及到行上的循环,因为您必须将每一行相互比较。一种更好但稍微复杂的方法是查询给定距离(公差)内的所有对。

首先对值进行排序。