python-3.x - 给定增长率和特殊规则,如何获得 Pandas 的累积增长?

标签 python-3.x pandas numpy

我有这个数据框:

date    amount
2018/01 100
2018/02 105
2018/03 110.25
2018/04 200

正如您所看到的,每个月,金额都会比之前的值增加 5%。然而,每第 4 个月(2018/04),这条规则不适用。相反,它应该只超过常量值,例如 200。

如何在 pandas 数据框中对其进行编程?

最佳答案

@Lroy_12374 目前尚不清楚 5-8 月及以后会发生什么,这会影响如何编写逻辑。例如: a) 第 5 个月是否应该比第 3 个月高 5%?或者 b) 是否应该比每四个月(即2018年4月、2018年8月、2018年12月、2019年4月、2019年8月、2019年12月等)高5%?或者 c) 如果第 4 个月不是常数,它是否应该比第 4 个月高 5%,这意味着第 5 个月是 1.05^2*(第 3 个月)。

另外,常量的定义也不清楚。从字面上看,每第四个月会是 200 左右吗?或者,会是一个不遵循其他 3 个月模式的不同数字吗?

我已经为上面的场景 c) 编写了一些代码:

import pandas as pd
import numpy as np
df = pd.DataFrame({'date' : ['2018/01','2018/02','2018/03', 
'2018/04','2018/05','2018/06','2018/07', '2018/08']})
start_amount = 100
constant=200
growth=.05
df['amount'] = np.where((df.index+1)%4 != 0,
                        start_amount * (1+growth) ** df.index, constant)
df

这里的关键是使用np.where并根据行号实现逻辑,您可以通过df.index获得行号。我在上面的代码中所做的是将 1 添加到行 (df.index+1) 中,因为 python 从 0 开始计数,并且您需要基于第四个月的逻辑。然后,我使用 % 符号,它返回除法后的余数,如果是第四行,您希望该余数等于 0(即 4/4 = 余数 0)。因此,基本上,如果某些内容不是每第四行都需要乘以 1.05(增加 5%),则根据行号进行 RAISED,并且如果是第四行,则需要返回一个常量。

我希望这会有所帮助。

关于python-3.x - 给定增长率和特殊规则,如何获得 Pandas 的累积增长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60571819/

相关文章:

python - 如何加快 Pandas 中每个 groupby 组的缺失值替换?

python - 尝试理解 Python 中的可选参数、列表参数和命名参数

python - 从 C 线程调用 Python 代码

python - 如何在 while 循环中使用用户输入修改矩阵,并在用户输入字符串时中断?

python - 具有线性约束的 Scipy.optimize.minimize SLSQP 失败

python - PyCUDA + numpy,以及一般字符串处理

python - 切片数组的形状

Python-如何初始化随机函数

python - 对混合类型和不同长度的字符串进行排序

pandas - 如何使用 Python Pandas 执行三变量相关