如何在python / pandas中使用最小值执行累积和?
在下表中:
数据帧
barImpl
实现这一目标的一种方法是使用循环但是它会很混乱,并且可能有更有效的方法来实现这一点。
以下是生成数据帧的代码:
fooBarEntityImpl
如何在python / pandas中应用具有最小值的累积和来生成“库存”列中显示的值?
答案 0 :(得分:1)
根据数据,循环具有相同符号的块可能更有效,例如。大的运行子块都是正面或负面的。在一系列负值之后,您只需要小心回到正值。
使用最小限制值作为向量的minS求和:
import numpy as np
i_sign = np.append(np.where(np.diff(np.sign(vector)) > 0)[0],[len(vector)])
i0 = 1
csum = np.maximum(minS, vector[:1])
for i1 in i_sign:
tmp_csum = np.maximum(minS, csum[-1] + np.cumsum(vector[i0:i1+1]))
csum = np.append(csum, tmp_csum)
i0 = i1
csum中的最终输出。
答案 1 :(得分:0)
非常难看的解决方案
start = df.index[0]
df['cumsum'] = [max(df['change in inventory'].loc[start:end].sum(), 0)
for end in df.index]
答案 2 :(得分:0)
不幸的是,您可以使用循环:
lastvalue = 0
newcum = []
for row in df['change in inventory']:
thisvalue = row + lastvalue
if thisvalue < 0:
thisvalue = 0
newcum.append( thisvalue )
lastvalue = thisvalue
print pd.Series(newcum, index=df.index)
2015-01-01 100
2015-01-02 80
2015-01-03 50
2015-01-04 10
2015-01-05 0
2015-01-06 100
dtype: int64