首页 > 解决方案 > 创建一个引用其值的 Pandas 列

问题描述

我正在尝试将 VBA 宏转换为 python 脚本。我需要向数据框添加一个新列:

 X  Y 
    
 1  2 
 3  4
 5  6 
 7  8 

这将是上面的值(第一个为 0)和 X 中的值乘以 Y 与上面的值相加的总和:

 X  Y  Z    Z(calculations) 

 1  2  0    0 
 3  4  12   0 + 3*(4+0)
 5  6  102  12 + 5*(6+12)  
 7  8  872  102 + 7*(8+102)  

所以基本上是 Excel 公式(在 Z2 单元格中):

=Z1+X2*(Y2+Z1)

有没有简单(快速)的方法来做到这一点?

标签: pythonpandasdataframe

解决方案


您可以使用 for 循环来做到这一点,但由于您要求一种快速的方法,您可以使用 numba 和@njit 来做到这一点:

from numba import njit

import pandas as pd
import numpy as np

@njit
def calculate(X, Y):
    res = np.empty(X.shape)
    res[0] = 0
    for i in range(1, res.shape[0]):
        res[i] = res[i-1] + (X[i] * (Y[i] + res[i-1]))
    return res

df = pd.DataFrame({"X": [1,3,5,7], "Y": [2,4,6,8]})
df
   X  Y
0  1  2
1  3  4
2  5  6
3  7  8

df["Z"] = calculator_nb(*df[["X", "Y"]].values.T)

df
   X  Y      Z
0  1  2    0.0
1  3  4   12.0
2  5  6  102.0
3  7  8  872.0

归功于这篇文章


推荐阅读