问题:
我想做的是一步一步地将aSeries中的值减去一个不断减少的基数。
我不确定这方面的术语-我确实认为我可以对cumsumdiff做些什么,但我认为我正在带领自己去那里进行一场疯狂的追逐……
起始代码:

import pandas as pd

ALLOWANCE = 100
values = pd.Series([85, 10, 25, 30])

期望输出:
desired = pd.Series([0, 0, 20, 30])

理论基础:
ALLOWANCE的基数开始,Series中的每个值都会减少剩余的量,津贴本身也会减少,因此会发生以下步骤:
从100开始,我们可以完全移除85使其变为0,现在我们将15左为ALLOWANCE
下一个值是10并且我们仍然有15可用,因此这再次变为0并且我们还有5可用。
下一个值是25—我们只剩下5了,所以这个值变为20,现在我们没有更多的裕度了。
下一个值是30,由于没有允许值,该值保持为30

最佳答案

按照你最初的想法,你可以写:

>>> (values.cumsum() - ALLOWANCE).clip_lower(0).diff().fillna(0)
0     0
1     0
2    20
3    30
dtype: float64

这是cumsum减去津贴的累积和。负值被剪裁为零(因为我们在透支限额之前不关心数字)。从那里,你可以计算出差额。
但是,如果第一个值可能大于允许值,则首选以下两行变化:
s = (values.cumsum() - ALLOWANCE).clip_lower(0)
desired = s.diff().fillna(s)

这会将第一个diff值填充为“First value-allowance”值。因此,在values降低到75的情况下,它返回NaNALLOWANCE

关于python - 根据递减值计算新值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28676916/

10-12 18:09