Python 某列值累加求和到特定值后重置重新开始求和

img


我有一列数值 我希望他们几个累加值要小于等于10,取小于10的最大累加值,一旦大于10就保留原值

img


我尝试过这样的代码,但是他会保留到大于我想要的阈值10w后的一位

img

想知道有没有什么解决方法

original_value = [1,2,3,5,5,9,13]  
lastvalue = original_value[0]   # 把last value设为第一个值
newcum = []

for i in original_value[1:]:                        # 从第二个值开始
    if lastvalue + i > 10:                            # 若加上新值已经超过了阈值
        newcum.append(lastvalue)            # 把已经有的值填入
        lastvalue = i                                    # 更新last value(包含新值大于10的情况)
    else:
        lastvalue += i                                  # 若不超过即更新last value

newcum.append(lastvalue)                    # 最后一个值,在循环中不会填入,所以需要单独操作
# newcum : [6,10,9,13]                          # 得到目标

然后将original替换为df['金额']即可,可用

original = list(df['金额'])

考虑到最后一次求和,可能会剩余几个数字因为没有到100000而被忽略掉的问题。提供参考代码如下:

lastvalue = 0
newcum = []

n = 1
for i in df['金额']:
    if lastvalue <= 100000:
        if lastvalue+i > 100000:
            newcum.append(lastvalue)
            lastvalue = i
        else:
            lastvalue += i
            if n == len(df['金额']):
                newcum.append(lastvalue)
    n += 1

print(newcum)


可以利用xlrd和xlwt实现

你要先判断加了i后是否超出10万,不能先加。


for i in df['金额']:
   if lastvalue + i > 100000:
        lastvalue = i
        newcum.append(lastvalue)
   else:
        lastvalue += i

这个应该符合你的预期,条件要>=10,最后的累加值不一定会追加进去,看你需求,需要的话在结束循环之后把最后的累加值也加到列表里

values = [1, 2, 3, 4, 4, 5, 3, 5, 1, 3 ,5]
current_sum = 0
cumsum = []
for i in range(len(values)):
    if (current_sum + values[i]) >= 10:
        cumsum.append(current_sum)
        current_sum = values[i]
    else:
        current_sum += values[i]
cumsum.append(current_sum)
current_sum = 0
cumsum = []
for i in df['金额']:
    if (current_sum + i) >= 10:
        cumsum.append(current_sum)
        current_sum = i
    else:
        current_sum += i
cumsum.append(current_sum)