You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中对DataFrame按ID实现滚动乘积计算?

1 | 1
1 | 0.9
1 | 0.8
1 | 0.5
2 | 1
2 | 0.6
2 | 0.7
2 | 0.9

我希望按ID对rate值进行滚动乘积计算,例如ID为1时,以初始值20为基础,依次用前一次计算结果乘以下一个rate值。

我目前通过循环实现该逻辑:
```python
new_v = [rates[0] * 20]
for r in rates[1:]:
    new_v.append(new_v[-1] * r)

想了解如何直接用DataFrame实现该逻辑,以提升计算效率。


解决方案

可以用pandas的groupby结合cumprod()方法高效实现,无需手动循环,性能远优于Python循环(尤其数据量大时)。

实现代码

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'id': [1,1,1,1,2,2,2,2],
    'rate': [1, 0.9, 0.8, 0.5, 1, 0.6, 0.7, 0.9]
})

# 按ID分组计算累积乘积,再乘以初始值20
df['result'] = df.groupby('id')['rate'].cumprod() * 20

输出结果

id  rate  result
0   1   1.0   20.00
1   1   0.9   18.00
2   1   0.8   14.40
3   1   0.5    7.20
4   2   1.0   20.00
5   2   0.6   12.00
6   2   0.7    8.40
7   2   0.9    7.56

逻辑说明

  • groupby('id'):将数据按ID拆分,保证每个ID的计算独立进行
  • cumprod():对每组内的rate列计算累积乘积,自动完成从第一个元素开始的滚动相乘(比如ID=1的组,计算过程为1 → 1*0.9 → 1*0.9*0.8 → 1*0.9*0.8*0.5)
  • 乘以初始值20后,得到的就是从20开始依次乘每个rate的滚动结果,和你循环实现的逻辑完全一致,但pandas内置方法是C级别的实现,效率提升明显。

内容的提问来源于stack exchange,提问作者user3379546

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:53:10