Pandas DataFrame如何采用向量化方法免循环动态计算更新Calculated列
实现方案
你的需求本质是累积除法运算,可以用pandas的cumprod()累积乘积方法实现完全向量化操作,不需要任何循环。
完整代码
import pandas as pd import numpy as np # 构造原始数据 data = {'Product':['A', 'B', 'C', 'D'], 'Price':[10, 20, 25, 30], 'Calculated':[10, np.nan, np.nan, np.nan]} df = pd.DataFrame(data) # 向量化计算逻辑 init_val = df.loc[0, 'Calculated'] df['Calculated'] = init_val * (1/df['Price']).shift(fill_value=1).cumprod()
逻辑说明
- 首先取出第一行的初始计算值
init_val = 10 df['Price'].shift(fill_value=1):把Price列整体下移一行,第一行空出来的位置填1,处理后每一行的值就对应原始数据里上一行的Price- 对每个值取倒数,再调用
cumprod()做累积乘积,得到每一行相对于初始值的缩放倍数 - 最后用初始值乘以缩放倍数序列,直接赋值给Calculated列即可得到结果
运行结果
| Product | Price | Calculated |
|---|---|---|
| A | 10 | 10.000 |
| B | 20 | 1.000 |
| C | 25 | 0.050 |
| D | 30 | 0.002 |
该方案是纯向量化实现,数据量越大性能优势越明显,远快于循环实现。
内容的提问来源于stack exchange,提问作者Lopez
相关产品推荐
相关产品推荐

