cumsum(),然后取模运算符:
>>> a = np.array([1,1,1,1,1,1,1,1,1,1])>>> limit = 5>>> x = a.cumsum() % limit>>> xarray([1, 2, 3, 4, 0, 1, 2, 3, 4, 0])
然后,您可以将任何零值设置回限制以获取所需的数组:
>>> x[x == 0] = limit>>> xarray([1, 2, 3, 4, 5, 1, 2, 3, 4, 5])
这是使用熊猫
expanding_apply方法的一种可能的通用解决方案。(我尚未对其进行广泛的测试…)
首先定义一个修改后的
cumsum函数:
import pandas as pddef cumsum_limit(x): q = np.sum(x[:-1]) if q > 0: q = q%5 r = x[-1] if q+r <= 5: return q+r elif (q+r)%5 == 0: return 5 else: return (q+r)%5a = np.array([1,1,1,1,1,1,1,1,1,1]) # your example array
将函数应用于数组,如下所示:
>>> pd.expanding_apply(a, lambda x: cumsum_limit(x))array([ 1., 2., 3., 4., 5., 1., 2., 3., 4., 5.])
这是应用于另一个更有趣的系列的函数:
>>> s = pd.Series([3, -8, 4, 5, -3, 501, 7, -100, 98, 3])>>> pd.expanding_apply(s, lambda x: cumsum_limit(x)) 0 31 -52 -13 44 15 26 47 -968 29 5dtype: float64
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)