gpt4 book ai didi

python - 对一列执行累积总和,但如果总和在 Pandas 中变为负数,则重置为 0

转载 作者:太空狗 更新时间:2023-10-29 18:31:05 24 4
gpt4 key购买 nike

我有一个包含两列的 pandas 数据框,

Item    Value
0 A 7
1 A 2
2 A -6
3 A -70
4 A 8
5 A 0

我想对列 Value 求和。但是,在创建累积和时,如果该值变为负数,我想将其重置为 0。

我目前正在使用如下所示的循环来执行此操作,

sum_ = 0
cumsum = []

for val in sample['Value'].values:
sum_ += val
if sum_ < 0:
sum_ = 0
cumsum.append(sum_)

print(cumsum) # [7, 9, 3, 0, 8, 8]

我正在寻找一种更有效的方法来在纯 Pandas 中执行此操作。

最佳答案

稍微修改一下也是这个方法慢一点numba解决方案

sumlm = np.frompyfunc(lambda a,b: 0 if a+b < 0 else a+b,2,1)
newx=sumlm.accumulate(df.Value.values, dtype=np.object)
newx
Out[147]: array([7, 9, 3, 0, 8, 8], dtype=object)

numba 解决方案

from numba import njit
@njit
def cumli(x, lim):
total = 0
result = []
for i, y in enumerate(x):
total += y
if total < lim:
total = 0
result.append(total)
return result
cumli(df.Value.values,0)
Out[166]: [7, 9, 3, 0, 8, 8]

关于python - 对一列执行累积总和,但如果总和在 Pandas 中变为负数,则重置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57510604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com