我有两个列表,每个列表中都填充了时间戳,即list_a和list_b。使用np.searchsorted为list_b中的每个条目查找list_a中的最新条目的最佳方法是什么?结果将是list_a_updated,其中list_a_updated中的每个x直接匹配到list_b中其对应的(以及以后的)条目。这个问题与这个问题非常相似
pandas.merge:匹配最接近的时间戳> =一系列时间戳
但有些不同。
令我感到尴尬的是,我不能只是如何扭转这种状况,因此它抓住了<=时间戳而不是> =时间戳,但是我已经使用了一段时间了,而且它似乎并不那么明显。我的示例代码是:
#in this code tradelist is list_b, balist is list_a
tradelist=np.array(list(filtereddflist[x][filtereddflist[x].columns[1]]))
df_filt=df_filter(filtereddflist2[x], 2, "BEST_BID" )
balist=np.array(list(df_filt[df_filt.columns[1]]))
idx=np.searchsorted(tradelist,balist)-1
mask= idx <=0
df=pd.DataFrame({"tradelist":tradelist[idx][mask],"balist":balist[mask]})
解决方案并不像切换不平等一样简单。
如果有帮助,我将处理贸易和投标库存数据,并尝试找到每个贸易(list_b)的最新投标(list_a),而不必诉诸于for循环。
为了使我们的生活更轻松,请使用数字代替时间戳:
>>> a = np.arange(0, 10, 2)
>>> b = np.arange(1, 8, 3)
>>> a
array([0, 2, 4, 6, 8])
>>> b
array([1, 4, 7])
其中的最后一个时间戳a
小于或等于其中的每个时间戳,b
将是[0, 4, 6]
,它对应于index [0, 2, 3]
,这正是我们得到的结果:
>>> np.searchsorted(a, b, side='right') - 1
array([0, 2, 3])
>>> a[np.searchsorted(a, b, side='right') - 1]
array([0, 4, 6])
如果不使用,side='right'
那么第二个术语的值将错误,因为两个数组中的时间戳都完全匹配:
>>> np.searchsorted(a, b) - 1
array([0, 1, 3])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句