Numpy 同步两个阵列的矢量化方法
我有两个熊猫时间序列:Numpy 同步两个阵列的矢量化方法,numpy,pandas,vectorization,Numpy,Pandas,Vectorization,我有两个熊猫时间序列:x,和y,我想“从”同步。我想为x中的每个元素查找y中最新的(按索引)元素(按索引值)。例如,我想计算这个new\ux: x new_x ---- ----- 13:01 13:00 14:02 14:00 y ---- 13:00 13:01 13:30 14:00 我在寻找一个矢量化的解决方案,而不是Python循环。时间值基于Numpydatetime64。y数组的长度约为数百万,因此O(n^2)解可能不实用。在某些圆中,此操作称为“
x
,和y
,我想“从”同步。我想为x
中的每个元素查找y
中最新的(按索引)元素(按索引值)。例如,我想计算这个new\ux
:
x new_x
---- -----
13:01 13:00
14:02 14:00
y
----
13:00
13:01
13:30
14:00
我在寻找一个矢量化的解决方案,而不是Python循环。时间值基于Numpy
datetime64
。y
数组的长度约为数百万,因此O(n^2)解可能不实用。在某些圆中,此操作称为“asof”联接:
在内部,它使用。使用
Series.searchsorted()
返回要插入x
的y
索引。然后,您可以从该值中减去一,并使用它来索引y
In [1]: x
Out[1]:
0 1301
1 1402
In [2]: y
Out[2]:
0 1300
1 1301
2 1330
3 1400
In [3]: y[y.searchsorted(x)-1]
Out[3]:
0 1300
3 1400
注意:上面的示例使用int64系列这似乎符合您的要求:此问题重复了“谢谢”。另请参见:有关McKinney的“使用数组操作”中的“O(n log n)NA友好时间序列”。但是
asof()
应该更快,因为searchsorted()
使用二进制搜索。
In [1]: x
Out[1]:
0 1301
1 1402
In [2]: y
Out[2]:
0 1300
1 1301
2 1330
3 1400
In [3]: y[y.searchsorted(x)-1]
Out[3]:
0 1300
3 1400