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
到目前为止,我所描述的仍然涉及到行上的循环,因为您必须将每一行相互比较。一种更好但稍微复杂的方法是查询给定距离(公差)内的所有对。首先对值进行排序。