问题:
我想做的是Series通过连续减少基础数字逐步减少a中的值。
Series
我不知道的术语这个-我想我可以做的东西cumsum和diff,但我觉得我自己领先于白费力气有…
cumsum
diff
起始代码:
import pandas as pd ALLOWANCE = 100 values = pd.Series([85, 10, 25, 30])
所需的输出:
desired = pd.Series([0, 0, 20, 30])
理由:
从ALLOWANCE-的底数开始-中的每个值Series都减去余量,这是津贴额本身,因此发生以下步骤:
ALLOWANCE
85
0
15
10
5
25
20
30
继你最初的想法cumsum和diff,你可以写:
>>> (values.cumsum() - ALLOWANCE).clip_lower(0).diff().fillna(0) 0 0 1 0 2 20 3 30 dtype: float64
这是values减去津贴的累计总和。负值会被裁剪为零(因为我们在计算透支额之前才关心数字)。从那里,您可以计算出差异。
values
但是,如果第一个值可能大于容差,则首选以下两行变化:
s = (values.cumsum() - ALLOWANCE).clip_lower(0) desired = s.diff().fillna(s)
这将NaN用“第一值-余量”值填充第一值。因此,在其中的情况下ALLOWANCE被降低到75时,它返回desired作为Series([10,10, 25, 30])。
NaN
desired
Series([10,10, 25, 30])