如何用最快方式计算Pandas DataFrame的累积内积?
最快实现Pandas累积乘积和的方法
原始DataFrame
| A | B |
|---|---|
| 2 | 6 |
| 5 | 5 |
| 7 | 5 |
| 8 | 2 |
| 6 | 11 |
需求
计算前i行(i从1到DataFrame总行数)A、B列对应元素乘积的累积和:
- i=1时,结果为
2*6=12 - i=2时,结果为
2*6+5*5=37 - i=3时,结果为
2*6+5*5+7*5=72 - 以此类推,得到每一步的累积结果
最优实现方案
放弃Python循环,使用Pandas内置的向量化操作,这是效率最高的方式——尤其是处理大数据集时,性能远优于逐行循环。
代码实现
import pandas as pd # 构造目标DataFrame df = pd.DataFrame({ 'A': [2, 5, 7, 8, 6], 'B': [6, 5, 5, 2, 11] }) # 1. 向量化计算每行A与B的乘积 product_col = df['A'] * df['B'] # 2. 调用内置方法计算累积和 cumulative_sum = product_col.cumsum() # 若需要将结果存入原DataFrame df['cumulative_sumproduct'] = cumulative_sum # 输出结果 print(df)
运行结果
| A | B | cumulative_sumproduct |
|---|---|---|
| 2 | 6 | 12 |
| 5 | 5 | 37 |
| 7 | 5 | 72 |
| 8 | 2 | 88 |
| 6 | 11 | 154 |
关键说明
df['A'] * df['B']:一次性完成所有行的乘积计算,无需循环遍历,属于向量化运算cumsum():Pandas底层用C实现的累积求和方法,比Python原生循环快几个数量级
如果只需要得到累积和的列表,无需修改原DataFrame,可直接:
cumulative_sum_list = (df['A'] * df['B']).cumsum().tolist() # 结果:[12, 37, 72, 88, 154]
内容的提问来源于stack exchange,提问作者TourEiffel
相关产品推荐
相关产品推荐

