【问题标题】:numpy array equivalent of pandas.shift() function?与 pandas.shift() 函数等效的 numpy 数组?
【发布时间】:2020-06-14 20:43:58
【问题描述】:

我有一个数组

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

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

【问题讨论】:

    标签: python-3.x pandas numpy scipy shift


    【解决方案1】:

    为什么不使用切片

    arr[1:] == arr[:-1]

    结果数组会稍微短一些,但不需要处理边界情况。

    【讨论】:

      【解决方案2】:

      这似乎是你想要的:

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

      【讨论】:

      • ValueError: 操作数不能与形状一起广播 (1375,) (1374,)
      • 是的,这是因为该示例使用了一个列表。您可以使用简单的tolist 方法从数组中获取列表:arr = np.array([False, False, False, True, True, True]).tolist()
      猜你喜欢
      • 1970-01-01
      • 2016-07-27
      • 2018-09-15
      • 2021-12-28
      • 1970-01-01
      • 2016-08-25
      • 2023-03-03
      • 2014-09-05
      • 1970-01-01
      相关资源
      最近更新 更多