我正在尝试使用纯粹的numpy计算正面、负面和无连续次数。问题在于我需要找到方程中groupby组件的方法,所有我的研究都表明我需要这个东西。我在这里找到了一个pandas的解决方案Pythonic way to calculate streaks in pandas dataframe
除了groupby之外,我已经能够转换所有内容。感谢任何帮助。
以下是我想要复制的pandas代码。唯一不适用于numpy的是groupby。我还创建了自己的numpy移位函数。
Pandas 版本:
期望的结果应该是:
以下是我想要复制的pandas代码。唯一不适用于numpy的是groupby。我还创建了自己的numpy移位函数。
Pandas 版本:
def streaks(df, col):
sign = np.sign(df[col])
s = sign.groupby((sign!=sign.shift()).cumsum()).cumsum()
return df.assign(u_streak=s.where(s>0, 0.0),
d_streak=s.where(s<0,0.0).abs())
我部分的NumPy版本:
arr = np.array([0.2,0.1,0.1,0.0,-0.2,-0.1,0.0])
sign = np.sign(arr)
s = np.not_equal(sign, shift(sign))
# now I need to groupby and then sum and sum again
np.cumsum(groupby(np.cumsum(s)))
期望的结果应该是:
array([1.,2.,3.,0.,-1.,-2.,0.])