在大熊猫数据框中找到到下一个更高值的距离

问题描述 投票:0回答:1

我有一个包含浮点值的数据框

my_df = pd.DataFrame([1,2,1,4,3,2,5,4,7])

我正在尝试为每个数字查找(需要移动多少个索引[[向前),直到找到比当前数字大的下一个数字为止,如果没有更大的数字,则用一些数字进行标记值(如999999)。

因此,对于上面的示例,正​​确答案应该是

result = [1,2,1,3,2,1,2,1,999999]

目前,我已经通过itertuples(意味着O(n ^ 2))非常慢的双循环解决了它

有更聪明的方法吗?

python pandas
1个回答
0
投票
这是一个利用广播的麻木:

a = my_df.squeeze().to_numpy() diff_mat = a - a[:,None] result = (np.triu(diff_mat)>0).argmax(1) - np.arange(diff_mat.shape[1]) result[result <= 0] = 99999


print(result) array([ 1, 2, 1, 3, 2, 1, 2, 1, 99999], dtype=int64)
© www.soinside.com 2019 - 2024. All rights reserved.