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

糟糕的用户

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

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))

有更聪明的方法吗?

亚图

这是一个基于numpy的利用广播的方式:

a = my_df.squeeze().to_numpy() # my_df.squeeze().values for versions 0.24.0.<

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)

diff_mat距离矩阵在哪里,我们正在寻找从主对角线开始的值,这些值大于0

array([[ 0,  1,  0,  3,  2,  1,  4,  3,  6],
       [-1,  0, -1,  2,  1,  0,  3,  2,  5],
       [ 0,  1,  0,  3,  2,  1,  4,  3,  6],
       [-3, -2, -3,  0, -1, -2,  1,  0,  3],
       [-2, -1, -2,  1,  0, -1,  2,  1,  4],
       [-1,  0, -1,  2,  1,  0,  3,  2,  5],
       [-4, -3, -4, -1, -2, -3,  0, -1,  2],
       [-3, -2, -3,  0, -1, -2,  1,  0,  3],
       [-6, -5, -6, -3, -4, -5, -2, -3,  0]], dtype=int64)

我们np.triu为此:

np.triu(diff_mat)

array([[ 0,  1,  0,  3,  2,  1,  4,  3,  6],
       [ 0,  0, -1,  2,  1,  0,  3,  2,  5],
       [ 0,  0,  0,  3,  2,  1,  4,  3,  6],
       [ 0,  0,  0,  0, -1, -2,  1,  0,  3],
       [ 0,  0,  0,  0,  0, -1,  2,  1,  4],
       [ 0,  0,  0,  0,  0,  0,  3,  2,  5],
       [ 0,  0,  0,  0,  0,  0,  0, -1,  2],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  3],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0]], dtype=int64)

通过检查哪个大于0,并采用argmax布尔值,ndarray我们将发现第一个值大于0每行:

(np.triu(diff_mat)>0).argmax(1)
array([1, 3, 3, 6, 6, 6, 8, 8, 0], dtype=int64)

我们只需要从主对角线到起点减去相应的偏移量

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在熊猫数据框中找到值的下一个位置和它们之间的值计数?

在熊猫中找到下一个更高或更低的数字

在熊猫数据框中找到一个值

根据上一个和下一个值过滤熊猫数据框

获取熊猫数据框中的下一个非nan值

如何在熊猫数据框中找到连续值的最后一个值?

如何在 C 中的二叉搜索树中找到比选定数字更高的值的下一个节点?

在R中找到下一个实例的时间

在(浮点)数字列表中找到下一个较低的值?

如何在Django查询中找到下一个最高值

在数组中找到下一个最小值?

从列中找到n范围内的下一个高/低值

CSV:如何在列表(python)中找到下一个更大的值?

在两个熊猫数据框中找到匹配的值,然后从匹配的行中返回一个值

从熊猫数据框中找到值的第一个匹配项(从值列表中查找)并返回该行的索引

用大数据框的上一个或下一个值替换NA

在熊猫数据框中为下一个连续行添加新列

获取熊猫数据框中的下一个元素

Excel公式-如果在行中找到值,则返回下一个单元格的值

根据下一个单词在一行中找到一个单词

在列中找到下一个空单元格,然后插入下一个序号

用下一个值填充数据框列中的空值

在每一行熊猫数据框中找到第一个交点

在一行熊猫数据框中找到第一个真值

找到对应于条件的下一个值

从列表中找到属性等于某个值的对象,并在之后获得下一个对象

在排序的数组列表中找到2个最接近的上一个值和2个最接近的下一个值

如何在熊猫数据框中找到最后一个事件的日期

如何在熊猫数据框行中找到最后一个簇?