如何在Python pandas中实现累积除法运算
解决方案
你的需求可以通过Pandas内置的cumprod(累积乘积)函数直接实现,不需要额外开发自定义累积除法函数:你需要的每一步计算都是前一个Discount值除以(1+当前Rates),本质是对1/(1+Rates)序列做累积乘积,完全匹配cumprod的使用场景。
方法1:直接使用cumprod实现(推荐)
代码示例:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Rates': [0.000028745455]*7 }) # 计算Discount列 df['Discount'] = (1/(1 + df['Rates'])).cumprod() # 输出保留9位小数,和预期格式一致 print(df.round(9))
运行后输出和你给出的预期结果完全匹配:
Rates Discount 0 2.874546e-05 0.999971255 1 2.874546e-05 0.999942512 2 2.874546e-05 0.999913769 3 2.874546e-05 0.999885026 4 2.874546e-05 0.999856285 5 2.874546e-05 0.999827545 6 2.874546e-05 0.999798805
这个方案是最优解,底层采用向量化计算,性能远高于手动循环实现,即使处理百万级行的数据也能快速完成。
方法2:通用累积除法实现
如果你需要更通用的、支持任意初值的累积除法功能,可以用Numpy的ufunc accumulate方法实现:
import numpy as np # 初值设为1,除数序列为1+Rates divisors = 1 + df['Rates'].values cum_div = np.divide.accumulate(np.insert(divisors, 0, 1))[1:] df['Discount'] = cum_div
这个方案可以适配任意自定义初值的累积除法场景,不需要转换为乘积逻辑。
内容的提问来源于stack exchange,提问作者Yaser
相关产品推荐
相关产品推荐

