scipy panda.shift()函数的numpy数组等价物?

6ie5vjzr  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(131)

我有一个数组

[False False False ...  True  True  True]

我想检查是否前一个值==当前值。在Pandas中,我可以使用类似于...

np.where(df[col name].shift(1).eq(df[col name]), True, False)

我尝试使用scipy shift,但输出不正确,所以可能我用错了?

np.where(shift(long_gt_price, 1) == (long_gt_price),"-", "Different")

我只是想告诉你我说它会产生不正确的输出是什么意思:左边的列是移位(1),右边的列是未移位的列,所以左边的列应该等于到它的对角线的平方,至少这是我的理解/我想要的是False / True在左边5下,右边4下,因此对我来说没有任何意义。

slmsl1lt

slmsl1lt1#

为什么不使用切片
arr[1:] == arr[:-1]
结果将是稍微短一些的数组,但不需要处理边界情况。

flseospp

flseospp2#

这似乎是你想要的:

shift_by = 1
arr = np.array([False, False, False, True, True, True]).tolist() ## array -> list
shift_arr = [np.nan]*shift_by + arr[:-shift_by]
np.equal(arr,shift_arr)

对于纯粹的numpy

shift_by = 1
arr = np.array([False, False, False, True, True, True])
np.concatenate([np.array([False]*shift_by),np.equal(arr[shift_by:],arr[:-shift_by])])
fykwrbwg

fykwrbwg3#

一个简单的一维数组移位函数,类似于Pandas:

def arr_shift(arr: np.ndarray, shift: int) -> np.ndarray:
    if shift == 0:
        return arr
    nas = np.empty(abs(shift))
    nas[:] = np.nan
    if shift > 0:
        res = arr[:-shift]
        return np.concatenate((nas,res))
    res = arr[-shift:]
    return np.concatenate((res,nas))

这是为了处理数值数组,因为移位后的值被np.NAN替换。选择另一个“null”值是很简单的,只需用任何你想要的值填充nas数组。

相关问题